一、工作流程
CMake允许开发者编写一种与平台无关的CMakeList.txt文件来制定编译流程,之后根据所在的平台进一步生成本地化Makefile和工程文件(e.g., Unix下的Makefile)
Linux平台下使用CMake生成Makefile并编译的流程如下:
1)编写CMake配置文件-CMakeList.txt;
2)执行命令 cmake PATH 或 ccmake PATH 生成Makefile,两者的区别在于 ccmake 提供交互式界面;
3)执行命令 make 进行编译。
以下内容参考超详细的CMake教程 - 一杯清酒邀明月 - 博客园
二、Example_1(单个源文件)
1)编写主函数——实现幂指数的计算;
2)编写CMakeLists.txt文件,并与main.cc位于同一目录
CMake语法较为简单,由命令、注释和空格组成
命令:不区分大小写,由命令名称、小括号和参数组成,参数之间利用空格间隔。本例所用如下所示:
cmake_minimum_required :配置文件所需CMake的最低版本;
project :标识项目名称;
add_executable :将源文件编译为可执行文件。
注释:#之后即为注释;
代码如下所示:
1 # CMake 最低版本要求 2 3 cmake_minimum_required (VERSION 3.0) 4 5 # 项目信息 6 7 project (Demo1) 8 9 # 指定生成目标 10 11 add_executable(Demo main.cc)
3)执行 cmake . ,生成Makefile和项目文件,之后执行 make ,生成目标文件,最后执行 ./Demo 5 4 ,输出结果。
三、Example_2(同一目录,多个源文件)
1)在Example_1的基础上,将power函数移至另一源文件中,此时的CMakeLists文件如下所示:
1 # CMake 最低版本要求 2 3 cmake_minimum_required (VERSION 3.0) 4 5 # 项目信息 6 7 project (Demo1) 8 9 # 指定生成目标 10 11 add_executable(Demo1 main.cc Function.cc)
同样执行Example_1所示的命令,得到相同的结果,其中目标文件为Demo1
但是这种手动添加较为繁琐,我们可以使用 aux_source_directory ,该命令会查看目录下所有源文件,之后将结果存入指定变量名,语法如下所示:
aux_source_directory (<dir> <variable>)
修改之后的CMakeLists.txt文件如下所示:
1 # CMake 最低版本要求 2 3 cmake_minimum_required (VERSION 3.0) 4 5 # 项目信息 6 7 project (Demo1) 8 9 # 查看所有源文件 10 11 aux_source_directory(. DIR_SRC) 12 13 # 指定生成目标 14 15 add_executable(Demo1 ${DIR_SRC})
四、Example_3(多个目录多个源文件)
1)将Example_2中的power函数的相关文件移到另一目录
2)此时对于子函数所在的目录我们仍需要编写CMakeLists.txt文件,如下所示
1 # 查找当前目录源文件,将其保存在DIR_LIB_SRCS 2 3 aux_source_directory(. DIR_LIB_SRCS) 4 5 # 生成链接库 6 7 add_library(mathfunctions ${DIR_LIB_SRCS})
3)根目录下CMakeLists.txt文件如下所示:
1 # CMake要求最低版本号 2 3 cmake_minimum_required (VERSION 2.8) 4 5 # 项目信息 6 7 project (Dome3) 8 9 # 查找当前目录下所有源文件并保存到DIR_SRCS变量中 10 11 aux_source_directory(. DIR_SRCS) 12 13 # 添加math子目录 14 15 add_subdirectory(math) 16 17 # 指定生成目标 18 19 add_executable(Demo main.cpp) 20 21 # 添加链接库 22 23 target_link_libraries(Demo mathfunctions)
4)执行 cmake . 和 make 得到所需的可执行文件。
五、参考
如有不正之处,敬请指正!
标签:cmake,源文件,add,初识,所示,CMake,DIR From: https://www.cnblogs.com/hjxiamen/p/16770190.html