cmake⼏种包含源⽂件⽣成可执⾏⽂件的⽅法总结
最近做的项⽬都是使⽤Cmake,但在参考开源项⽬的代码的时候,发现不同的⼈使⽤不同的⽅法,这时候你可能会不知所以然,但其实就是⼈们说的,条条⼤路通罗马,你不必纠结使⽤哪种⽅法,能通往罗马就可以啦。这总结了别⼈常⽤的⼏种⽅法,也是学习的总结。可能有不⾜的地⽅,仅供参考,如有错误的地⽅欢迎指正。
1.⽅法1
set(SRC_LIST main.c test1.c test2.cpp)
add_executable(Demo ${SRC_LIST})
(1)定义了这个⼯程会⽣成⼀个⽂件名为 hello 的可执⾏⽂件,
(2)相关的源⽂件是 SRC_LIST 中 定义的源⽂件列表,其中SRC_LIST是⼀个变量名,这变量名你可以⾃⼰取名字。SRC_LIST后⾯是C ⽂件或者cpp⽂件,可以有若⼲个,不清楚是否有最⼤值限制。使⽤了${}来引⽤变量,这是 cmake 的变量应⽤⽅式。
2.⽅法2
file(GLOB_RECURSE ALL_SRCS *.cpp *.c)
add_executable(Demo ${ALL_SRCS})
此处*.cpp *.c你可以再增加⾃⼰的路径,⽐如src/math/*.cpp *.c
3.⽅法3
add_executable(Demo main.c test1.c test2.cpp)
4.⽅法4
# 查当前⽬录下的所有源⽂件,并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 指定⽣成⽬标
add_executable(Demo ${DIR_SRCS})
5.⽅法5,使⽤add_library,这个可以和⽅法6可以做个对⽐
add_library(Demo test1.c test2.cpp)
#或者
#add_library(${PROJECT_NAME}  test1.c test2.cpp)
add_executable(Demo main.c)
#或者
#add_executable(Demo main.cpp)
#或者
#add_executable(${PROJECT_NAME} main.cpp)
#需要链接的其他库,⽐如boost,或者其他⾃⼰写的cpp,此项应该不是必要的,如果没有需求链接的库应该是可以不⽤此项的,暂时未做测试。
target_link_libraries(${PROJECT_NAME}
${Boost_LIBRARIES}
test3.c
test4.cpp
)
6.⽅法6,⽣成库,通过链接库包含源⽂件,这个可以和⽅法5可以做个对⽐
#这⾥是你的头⽂件⽬录,可能你的头⽂件不是放在math⼦⽬录⽬录下,需要更换成你⾃⼰的⽬录
include_directories("${PROJECT_SOURCE_DIR}/math")
#添加⼀个⼦⽬录并构建该⼦⽬录,⼦⽬录名称为math,并且⼦⽬录下必须有
add_subdirectory(math)
add_executable(Demo main.c)
#指明可执⾏⽂件 main 需要连接⼀个名为 MathFunctions 的链接库,这个 MathFunctions 链接库就是⼦⽬录⽣成的链接库
target_link_libraries(Demo MathFunctions)
⼦⽬录math的如下:
#查math⽬录下的所有源⽂件#并将名称保存到DIR_LIB_SRCS 变量,此时可以刚刚讲的⼏种⽅便包含源⽂件。不⼀定要⽤aux_source_directory aux_source_directory(. DIR_LIB_SRCS)
add_library (MathFunctions ${DIR_LIB_SRCS})
总的来说,cmake是很灵活的,有很多种⽅式,可以实现你的功能,并且维护简单就可以啦!可能还有其他的⽅法,欢迎留⾔补充!感觉还不错,点个赞吧,你的⽀持是我继续写博客的动⼒。⼤家⼀起学习进步!
参考⾃:
为什么现在都用cmake
《CMake Practice》CMake 实践

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。