一、编写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库文件的存放位置