CMake 教程(Step 1): 基础起点

11 篇文章 0 订阅
本篇博客介绍了如何使用CMake构建项目,包括设置项目版本号,创建可配置头文件传递版本信息,并指定C++11标准。通过VSCode配置CMakeLists.txt,实现编译和运行,最后展示了添加C++11特性后的测试结果。
摘要由CSDN通过智能技术生成

注:

最基本的项目是从源代码文件构建可执行文件。

  • 使用vscode 打开Step1目录, Step1目录在源码目录./Help/guide/tutorial下, 有关源码的下载参见: CMake 教程.
  • 按照创建工程的步骤,创建工程, 工程名设置为tutorial, 工程创建完成后自动生成CMakeLists.txt, main.cpp 和构建目录build.
  • 删除自动生成的main.cpp,并将CMakeLists.txtadd_executable(tutorial main.cpp)中的main.cpp替换为tutorial.cxx

编译和运行

这就是所需要的一切. 我们现在就可以构建和运行我们的项目了!

  • 点击状态栏的build按钮, 完成构建, 编译 和 链接工作.
  • 打开VSCode的终端(Ctrl + `), 输入如下命令测试运行生成的tutorial.exe:
    .\build\tutorial.exe
    .\build\tutorial.exe 9
    .\build\tutorial.exe 10
    
  • 测试结果如下:
    在这里插入图片描述

添加版本号和可配置的头文件

我们将添加的第一个特性是为我们的可执行文件和项目提供版本号。虽然我们可以在源代码中专门这样做,但使用CMakeLists.txt提供了更多的灵活性。

  • 打开CMakeLists.txt, 在project()命令中包含了工程的项目名称和版本号。

  • 然后,配置一个头文件,将版本号传递给源代码:

    configure_file(TutorialConfig.h.in TutorialConfig.h)
    
  • 由于配置文件将被写入到构建目录中,所以我们必须将构建目录添加到搜索包含文件的路径列表中。在CMakeLists.txt文件的末尾添加以下代码:

    target_include_directories(tutorial PUBLIC "${PROJECT_BINARY_DIR}")
    

注: target_include_directories() 不一定要放在末尾, 但必须放在add_executable()之后!!

  • 在源目录中创建TutorialConfig.h.in,包含以下内容:
    // the configured options and settings for Tutorial
    #define TUTORIAL_VERSION_MAJOR @tutorial_VERSION_MAJOR@
    #define TUTORIAL_VERSION_MINOR @tutorial_VERSION_MINOR@
    
  • CMake配置这个头文件时, @Tutorial_VERSION_MAJOR@@Tutorial_VERSION_MINOR@的值将被替换.
  • 接下来, 在tutorial.cxx中包含头文件TutorialConfig.h
  • 最后,在main()函数中添加如下代码, 打印出可执行程序的名称和版本号.
      ...
      #include "TutorialConfig.h"
      int main(int argc, char* argv[])
      {
          if (argc < 2) {
              std::cout << argv[0] << " Version " << TUTORIAL_VERSION_MAJOR << "."
                    << TUTORIAL_VERSION_MINOR << std::endl;
              std::cout << "Usage: " << argv[0] << " number" << std::endl;
              return 1;
         }
         ...
    }
    
  • 再次点击状态栏的build按钮, 完成构建.
  • VSCode的终端(Ctrl + `), 输入如下命令进行测试:
    .\build\tutorial.exe
    
  • 测试结果如下:
    在这里插入图片描述

指定C++标准

接下来, 让我们在tutorial.cxx中将atof()替换为std::stod(), 为我们的项目添加一些c++ 11的特性.

  • 删除#include <cstdlib>
  • atof()替换为std::stod()
      // convert input to double
      // const double inputValue = atof(argv[1]);
      const double inputValue = std::stod(argv[1]);
    
  • 我们需要在CMake代码中明确声明它应该使用正确的标志。在CMake中支持特定c++标准的最简单方法是使用CMAKE_CXX_STANDARD变量。在本教程中,将CMakeLists.txt文件中的CMAKE_CXX_STANDARD变量设置为11,将CMAKE_CXX_STANDARD_REQUIRED变量设置为True。请确保在add_executable()调用的上方添加CMAKE_CXX_STANDARD声明.
    ...
    # specify the C++ standard
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED True)
    ...
    add_executable(tutorial tutorial.cxx)
    ...
    
    • 再次点击状态栏的build按钮, 完成构建.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

falwat

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

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

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

打赏作者

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

抵扣说明:

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

余额充值