CMake初识(一)

一、工作流程

  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教程 - 一杯清酒邀明月 - 博客园 

  如有不正之处,敬请指正!

 

本文作者:hjxiamen

本文链接:https://www.cnblogs.com/hjxiamen/p/16770190.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   有梦-  阅读(42)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑