当前位置:网站首页 > R语言数据分析 > 正文

cmake教程推荐(cmake tutorial)



纸上学来终觉浅,觉知此时要躬行。学习一项技术最好的武器就是去实践和复盘。接触cmake有一年多了,但是真正学会cmake也是在用cmake编译项目的过程中,逐渐掌握了这门技术。本文想带着读者从一个小的点开始逐渐完善,最后做出一个涵盖绝大部分功能和满足日常需求的cmake demo工程。作者将在github中新建一个新的仓库,然后逐渐向上提交代码。最后作者会开源本项目的github网址,读者可以自行根据commit版本提示找到每一部分的源码。

  • 安装cmake
    因为是构建demo不需要依赖复杂的包,只需要ubuntu apt库中cmake即可,如果要更高版本,请自行到官网下载。

 
  

最基本的项目是将一个源代码文件生成可执行文件。对于这么简单的项目,只需要一个三行的 CMakeLists.txt 文件即可,这是本篇教程的起点。在 目录中创建一个 CMakeLists.txt 文件,如下所示:

 
  

cmake_minimum_required 指定使用 CMake 的最低版本号,project 指定项目名称,add_executable 用来生成可执行文件,需要指定生成可执行文件的名称和相关源文件。

注意,此示例在 CMakeLists.txt 文件中使用小写命令。CMake 支持大写、小写和混合大小写命令。tutorial.cpp 文件在commit first目录中,可用于计算数字的平方根。

 
  
  • 构建 编译 运行
    先从命令行进入到 目录,并创建一个构建目录 build,接下来,进入 build 目录并运行 CMake 来配置项目,并生成构建系统:

 
  

可执行文件Tutorial就在build目录下。

 
  

之前CMakeList.txt如下:

 
  

指定了项目名后,后面可能会有多个地方用到这个项目名,如果更改了这个名字,就要改多个地方,比较麻烦,那么可以使用 == PROJECT_NAME== 来表示项目名。

 
  

生成可执行文件需要指定相关的源文件,如果有多个,那么就用空格隔开,比如:

 
  

我们也可以用一个变量来表示这多个源文件:

 
  

set 命令指定 SRC_LIST 变量来表示多个源文件,用 ${var_name} 获取变量的值。
于是原来的 CMakeLists.txt 文件就可以变成如下所示:

 
  

这样可配置性就增强了很多,有利于后续项目扩展。

  • 添加版本号和配置头文件

我们可以在 CMakeLists.txt 为可执行文件和项目提供一个版本号。首先,修改 CMakeLists.txt 文件,使用 project 命令设置项目名称和版本号。

 
  

由于 TutorialConfig.h 文件会被自动写入 build 目录,因此必须将该目录添加到搜索头文件的路径列表中。将以下行添加到 CMakeLists.txt 文件的末尾:

 
  

安装刚才的方式用cmake … 构建项目的过程中会在build目录中生成TutorialConfig.h

 
  

下一步在 tutorial.cpp 包含头文件 TutorialConfig.h,最后通过以下代码打印出可执行文件的名称和版本号。

 
  
  • 制定 c++标准

接下来将tutorial.cpp 源码中的 atof 替换为 std::stod,这是 C++11 的特性。

 
  

在 CMake 中支持特定 C++标准的最简单方法是使用 CMAKE_CXX_STANDARD 标准变量。在 CMakeLists.txt 中设置 CMAKE_CXX_STANDARD 为11,CMAKE_CXX_STANDARD_REQUIRED 设置为True。确保在 add_executable 命令之前添加 CMAKE_CXX_STANDARD_REQUIRED 命令。

 
  

此时完整的CMakeList.txt

 
  

根据刚才的方法编译运行

 
  

代码保存在github commit second版本中

 
  
 
  

为了使用== MathFunctions== 这个库,我们将在顶级 CMakeLists.txt 文件中添加一个 add_subdirectory(MathFunctions) 命令指定库所在子目录,该子目录下应包含 CMakeLists.txt 文件和代码文件。

可执行文件要使用库文件,需要能够找到库文件和对应的头文件,可以分别通过 target_link_librariestarget_include_directories 来指定。

使用 target_link_libraries 将新的库文件添加到可执行文件中,使用 target_include_directories 将 MathFunctions 添加为头文件目录,添加到 Tutorial 目标上,以便 mysqrt.h 可以被找到。
然后在测试文件中把函数名设置为mysqrt。

 
  

完整的CMakeList.txt

 
  

安装刚才的方式编译运行,可以得到。

 
  

代码在github仓库提交版本 commit third中

现在将 MathFunctions 库设为可选的,虽然对于本教程来说,功能已经完成了,但对于较大的项目来说,这种情况很常见。

第一步是向顶级 CMakeLists.txt 文件添加一个选项。

 
  

option 表示提供用户可以选择的选项。命令格式为:option( "description [initial value])。

==USE_MYMATH ==这个选项缺省值为 ON,用户可以更改这个值。此设置将存储在缓存中,以便用户不需要在每次构建项目时设置该值。

下一个更改是使 MathFunctions 库的构建和链接成为条件。于是创建一个 if 语句,该语句检查选项 USE_MYMATH 的值。
在 if 块中,有 add_subdirectory 命令和 list 命令,APPEND表示将元素MathFunctions追加到列表EXTRA_LIBS中,将元素 ${PROJECT_SOURCE_DIR}/MathFunctions 追加到列表EXTRA_INCLUDES中。EXTRA_LIBS 存储 MathFunctions 库,EXTRA_INCLUDES 存储 MathFunctions 头文件。
变量EXTRA_LIBS用来保存需要链接到可执行程序的可选库,变量EXTRA_INCLUDES用来保存可选的头文件搜索路径。这是处理可选组件的经典方法,我将在下一步介绍现代方法。
接下来对源代码的进行修改。首先,在 tutorial.cpp 中包含 MathFunctions.h 头文件,
然后,还在 tutorial.cpp 中,使用 USE_MYMATH 选择使用哪个平方根函数:










 
  

因为源代码使用了 USE_MYMATH 宏,可以用下面的行添加到 tutorialconfig.h.in 文档中:

 
  

完整的CMakeLists如下:

 
  

测试:

 
  

代码在commit four版本中

 到此这篇cmake教程推荐(cmake tutorial)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就! 
  

                            

版权声明


相关文章:

  • druid 读音(fluid怎么读)2026-04-07 13:36:09
  • hrnetone(hrnetone百度百科)2026-04-07 13:36:09
  • coder网站(codeabbey网站)2026-04-07 13:36:09
  • store音标(store音标发音)2026-04-07 13:36:09
  • spring教程百度网盘(spring实战 pdf百度云)2026-04-07 13:36:09
  • directl怎么读(directo怎么读)2026-04-07 13:36:09
  • githubusercontent镜像(github镜像简书)2026-04-07 13:36:09
  • crnn(crnaira是什么品牌的手表)2026-04-07 13:36:09
  • grid布局高度(grid布局自适应)2026-04-07 13:36:09
  • redhat 注册(redhat注册破解)2026-04-07 13:36:09
  • 全屏图片