cmake 几种包含源文件生成可执行文件的方法总结

8 篇文章 0 订阅

 最近做的项目都是使用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,并且子目录下必须有CMakeLists.txt
add_subdirectory(math)

add_executable(Demo main.c)

#指明可执行文件 main 需要连接一个名为 MathFunctions 的链接库,这个 MathFunctions 链接库就是子目录生成的链接库 
target_link_libraries(Demo MathFunctions)



子目录math的CMakeList.txt如下: 



#查找math目录下的所有源文件#并将名称保存到DIR_LIB_SRCS 变量,此时可以刚刚讲的几种方便包含源文件。不一定要用aux_source_directory

aux_source_directory(. DIR_LIB_SRCS)

add_library (MathFunctions ${DIR_LIB_SRCS})

总的来说,cmake是很灵活的,有很多种方式,可以实现你的功能,并且维护简单就可以啦!可能还有其他的方法,欢迎留言补充!

感觉还不错,点个赞吧,你的支持是我继续写博客的动力。大家一起学习进步!

参考自:

https://www.cnblogs.com/chenlinchong/p/13649971.html

https://www.cnblogs.com/wuchaodzxx/p/8915539.html

https://www.jianshu.com/p/ffd475455f63

《CMake Practice》CMake 实践

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值