1. CMake基本

36 篇文章 0 订阅
14 篇文章 2 订阅

1.基本示例

Help/guide/tutorial/Step1目录下有tutorial.cxx源文件。
在同一目录中有CMakeLists.txt

通过TODO 1~3来完成CMakeLists.txt的编写。

  1. TODO 1
    #设定cmake版本
    cmake_minimum_required(VERSION 3.10)
    
  2. TODO 2
    #project()命令用来设定项目名字
    project(Tutorial)
    
  3. TODO 3
    #
    add_executable(Tutorial tutorial.cxx)
    

例如,我们可用进入Helo/guide/tutorial目录,并创建一个构建目录:

mkdir Step1_build

下一步,进入构建目录,并且运行cmake来配置项目,产生一个构建系统:

cd Step1_build
cmkae ../Step1

然后,调用构建系统来真正编译链接项目:

cmake --build .

这样就可以了。

2. 指定C++标准

cmake有许多特殊的变量,可以在项目代码中设定。它们要么是在背后创建的,要么是对cmake有意义。这些变量大多以CMAKE_开头。当为你的项目创建变量时,尽量避免这种命名约定。
其中,有两个特殊的用户可设置变量:CMAKE_CXX_STANDARDCMAKE_CXX_STANDARD_REQUIRED。它们可以一起用来指定构建项目所需的C++标准。

继续编辑Stpe1目录的文件,,由于我们已经为练习1创建了构建目录,并运行了cmake,因此可以跳到构建步骤:

cd Step1_build
cmake --build .

我们开始为项目添加一些C++ 11特性,如将tutorial.cxx中的atof替换为std::stod,然后移除#include <cstdlib>

我们需要在cmake中明确声明使用正确的标志。一个开启指定C++标准的方法是,在CMakeLists,txt中设置CMAKE_CXX_STANDARD变量,并将CMAKE_CXX_STANDARD_REQUIRED设置为True确保CMAKE_CXX_STANDARD 添加在add_executable()的上面。

set(CMAKE_CXX_STANDARD 11)
ser(CMAKE_CXX_STANDARD_REQUIRED True)

3. 添加版本号并配置头文件

有时候希望定义在CMakeLists.txt中的变量能被源代码使用。
比如,我们希望打印项目的版本号(在CMakeLists.txt中定义的)。

实现此目的一种方法是使用已配置的头文件。
我们创建一个输入文件,其中包含一个或多个要替换的变量。这些变量有特殊的语法,格式为@VAR@

然后,使用configure_file()命令将输入文件复制到给定的输出文件,并将这些VAR变量替换为CMakeLists.txt`中的当前值.

#使用project()命令设置项目名称和版本号
#当调用project()命令时,
#cmake在后台定义Tutorial_VERSION_MAJOR和Tutorial_VERSION_MINOR变量
project(Tutorial VERSION 1.0)
#然后,使用configure_file()复制输入文件,并替换指定的cmake变量
configure_file(TutorialConfig.h.in TutorialConfig.h)

由于配置的文件将写入项目二进制目录,因此我们必须将该目录添加到搜索包含文件的路径列表中。

注意,在本教程中,项目构建目录二进制目录指的是一个东西,而非意味着是bin/这样的目录。

我们使用target_include_directory()来指定可执行目标应该在哪里查找包含文件。

target_include_directories(Tutorial PUBLIC
                "${PROJECT_BINARY_DIR}"
                )

Tutorialconfig.h.in 是要配置的输入头文件。当从我们的CMakeLists.txt调用configure_file ()时,@Tutial_VERION_MAJOR@@Tutial_VERION_MINOR@的值将被 TutorialConfig.h中项目的相应版本号所替换。

ToturialConfig.h.in

#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

最后,在tutorial.cxx中打印版本号:
tutorial.cxx

cout << "Version " << Tutorial_VERSION_MAJOR << "."
          << Tutorial_VERSION_MINOR << endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

barbyQAQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值