• 1. CMake基本


    1.基本示例

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

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

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

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

    mkdir Step1_build
    
    • 1

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

    cd Step1_build
    cmkae ../Step1
    
    • 1
    • 2

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

    cmake --build .
    
    • 1

    这样就可以了。

    2. 指定C++标准

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

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

    cd Step1_build
    cmake --build .
    
    • 1
    • 2

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

    我们需要在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)
    
    • 1
    • 2

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

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

    target_include_directories(Tutorial PUBLIC
                    "${PROJECT_BINARY_DIR}"
                    )
    
    • 1
    • 2
    • 3

    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@
    
    • 1
    • 2

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

    cout << "Version " << Tutorial_VERSION_MAJOR << "."
              << Tutorial_VERSION_MINOR << endl;
    
    • 1
    • 2
  • 相关阅读:
    2024年全国VUE考试中心大全!
    【Java 快速复习】垃圾回收算法 & 垃圾回收器
    JVM原理
    TCPIP协议学习
    「底层原理」epoll源码分析,还搞不懂epoll的看过来
    微信公众号菜单栏规划怎么设置?
    centos上安装rabbitmq
    Linux 中的 chage 命令及示例
    CSS之垂直水平居中的背后
    Hadoop环境安装与配置
  • 原文地址:https://blog.csdn.net/qq_51470638/article/details/128027779