浅谈cmake,编写CMakeList.txt

一、编写CMakeLists.txt

1、同目录下单文件
①在.c文件的同级目录下创建CMakeLists.txt文件
②编写CMakeLists.txt #后为注释
多行注释#[[
]]
③一个基本的CMakeLists.txt编写例子

# CMake 最低版本号要求  防止新语法规则和避免兼容性问题--一般都要加上
cmake_minimum_required (VERSION 2.8)

# 当前项目名称--注意这个不是可执行文件
project (Test)

# 指定生成目标 将1.c生成1  注意,可在1后面添加若干个.c文件
add_executable(1 1.c)

2、同目录下多文件
CMakeLists.txt编写可如下

# CMake 最低版本号要求  防止新语法规则和避免兼容性问题
cmake_minimum_required (VERSION 2.8)

# 当前项目信息--注意这个不是可执行文件
project (Test)

# 指定生成目标 将*.c生成main  注意,可在main后面添加若干个.c文件
add_executable(main main.c Mystring.c 1.c)

但是遇到和之前自己编写makefile的老问题,文件多了,写的容易错漏
使用Cmake命令aux_source_directory (dir 变量名)
cmake:
aux_source_directory (. CUR_SRC) #定义cmake变量
${CUR_SRC} #引用变量

#使用变量做出如下改进

# CMake 最低版本号要求  防止新语法规则和避免兼容性问题
cmake_minimum_required (VERSION 2.8)

# 当前项目信息--注意这个不是可执行文件
project (Test)

# 查找当前目录 . 下的所有源文件.c文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_executable(main ${DIR_SRCS})

3、不同目录下多文件
添加头文件路径:include_directories(指定头文件路径名-相当当前路径写-I路径)
例子:
include_directories (inc)
include_directories (./inc)
以上所有的路径都是从CMakeLists.txt所在路径为起点的相对路径

使用静态库的方式,将不同源文件目录下的.c源文件生成.a文件
①添加子目录:add_subdirectory(指定子目录)
这个命令是告诉当前路径层的CMakeLists.txt 还有额外的目录层需要处理
②添加指定静态库到指定目标:target_link_libraries(目标 库名)
③将指定若干.c源文件编译打包生成静态库文件:add_library (库名 源文件列表)

#最上层的CMakeLists.txt---只管当前目录层的源文件

#版本号
cmake_minimum_required (VERSION 2.8)

#项目信息
project (Test)

#头文件
include_directories(inc)

#指定src为当前目录的子目录
add_subdirectory (src)

#查找当前目录的下所有源文件,保存在CUR_SRC中
aux_source_directory(. CUR_SRC)	

#生成指定目标文件
add_executable (./bin/main ${CUR_SRC})

#先创建main再把库链接到main(注意顺序)

#将指定的库/src/libmylib.a链接到指定目标可执行程序main
target_link_libraries(./bin/main mylib)
#子层的版本号,项目信息可写可不写
cmake_minimum_required (VERSION 2.8)

project (Test)

#.c-->.a静态库

include_directories(inc)

#设置静态库路径,--把静态库libmylib.a放在lib目录下
set(LIBRARY_OUTPUT_PATH ./../lib)

#将当前目录下所有.c放在LIB_SRC中
aux_source_directory(. LIB_SRC)

#将所有.c文件打包生成静态库文件libmylib.a
add_library(mylib ${LIB_SRC})	

二、拓展:

Cmake默认变量–不需要你定义 可直接使用 有固定意义

PROJECT_NAME:代表当前的项目名称

关于默认变量:
①在引用时要加 ${默认变量名}
②在设置默认变量时,使用set命令 规则:
set (变量名 变量的值)
例如:
set (LIBRARY_OUTPUT_PATH ./…/lib) #设置cmake当前层生成.a .so库文件的存放位置

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢饱饱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值