美文网首页
CMake教程(3):添加版本号和头文件

CMake教程(3):添加版本号和头文件

作者: MemetGhini | 来源:发表于2021-11-08 00:51 被阅读0次

在上一篇文章的基础上我们为可执行文件通过CMake添加版本号。首先用project命令设定项目的版本号。

project(Hello VERSION 1.0)

然后用configure_file命令把版本号传递到源代码中。该命令的作用是复制一个文件到另一个目录并替换@VAR@或者${VAR}为CMake中设定的值。我们为项目新增一个头文件叫Hello.h其内容为:

#define Hello_STR @Hello_STR@
#define Hello_VERSION_MAJOR @Hello_VERSION_MAJOR@
#define Hello_VERSION_MINOR @Hello_VERSION_MINOR@

并在CMakeLists.txt文件中设定Hello_STR的值

set(Hello_STR "\"Hello World From CMake!\"")

ps:set命令作用为为变量,缓存变量,环境变量赋值,本文中不详细探讨后面的文章中会专门讲解

调用configure_file来生成目标头文件:

configure_file(Hello.h Hello.h)

configure_file 命令:
第一个参数为输入文件目录,相对于CMAKE_CURRENT_SOURCE_DIR目录。也就是说相对于源码目录。
第二个参数为替换内容后的输出文件目录,相对于CMAKE_CURRENT_BINARY_DIR目录。也就是说相对了编译目录。

所以上面一行命令的作用为把根目录中的Hello.h里面@Hello_STR@, @Hello_VERSION_MAJOR@, @Hello_VERSION_MINOR@ 替换为具体的值并复制到build文件夹中。其中后面两项是设定project的版本号之后CMake自动生成,第一个我们用set命令设定了内容"Hello World From CMake!"
生成了头文件之后我们还需要通过target_include_directories命令把目录设到头文件搜索目录中,否则会找不到头文件。

target_include_directories(Hello PUBLIC ${PROJECT_BINARY_DIR})

target_include_directories的第一个参数为可执行文件名,必须是add_executable() 或者 add_library() 设定的名字。因此该命令必须放在add_executable()后面否则执行出错,找不到项目。可执行文件名和项目名可以不一样,target_include_directories的参数再后面的文章中详细讲解

所以完整的CMakeLists.txt文件为:

cmake_minimum_required(VERSION 3.10)
project(Hello VERSION 1.0)
set(Hello_STR "\"Hello World From CMake!\"")
configure_file(Hello.h Hello.h)
add_executable(Hello Hello.cpp)
target_include_directories(Hello PUBLIC ${PROJECT_BINARY_DIR})

此时执行cmake ..命令构建后目录结构如下:

.
├── CMakeLists.txt
├── Hello.cpp
├── Hello.h
└── build
    ├── CMakeCache.txt
    ├── CMakeFiles
    ├── Hello.h
    ├── Makefile
    └── cmake_install.cmake

细心一点的同学会发现,跟之前比这里多了一个Hello.h文件,其内容为:

#define Hello_STR "Hello World From CMake!"
#define Hello_VERSION_MAJOR 1
#define Hello_VERSION_MINOR 0

已经被CMakeLists.txt中的值替换了内容。再看看头文件是否引入成功,之前的Hello.cpp文件改为:

#include <iostream>
#include <Hello.h>

int main() 
{
    std::cout << Hello_STR << std::endl;
    std::cout << Hello_VERSION_MAJOR << std::endl;
    std::cout << Hello_VERSION_MINOR << std::endl;
    return 0;
}

备注:这里头文件用尖括号来引入,否则会从跟源文件同级目录搜索头文件,导致宏的内容跟预期不一致,是还没被替换的版。尖括号是预处理器以依赖于实现的方式搜索,通常在编译器预先指定的搜索目录中。
构建和编译后执行可执行文件,执行结果为:

> cmake ..
> make
> ./Hello
Hello World From CMake!
1
0

相关文章

  • CMake教程(3):添加版本号和头文件

    在上一篇文章的基础上我们为可执行文件通过CMake添加版本号。首先用project命令设定项目的版本号。 然后用c...

  • cmake - 版本号

    cmake为工程和程序添加版本号,可以直接在CMakeLists文件中指定 1 .set(Hello_world_...

  • CMake-api详解

    版本号 cmake_minimum_required(VERSION 3.4.1) 加载其他的cmake文件 ad...

  • Cmake用例

    1.cmake 基础构成 2.添加子项目 3.添加开关 根目录下CMakeLists.txt文件中添加 子目录下C...

  • 安装cmake3

    yum安装 添加cmake3源 2.yum安装yum install -y cmake3 缺少jsoncpp依赖,...

  • jom安装

    安装cmake1.到官网https://cmake.org/download/下载msi文件安装即可。2.添加到环...

  • llvm-4.0添加字符串加密--编译出错解决方法

    在提示的 lib/Transforms/Obfuscation/CMakeLists.txt文件中添加cmake_...

  • CMake教程(4):添加库

    在之前的基础上本文中将讲解如何把代码以库的形式引到工程中。在子目录中写一个简单的数学库,里面实现一个平方运算方法。...

  • CMake交叉编译配置

    罗列一下cmake常用的命令。 CMake支持大写、小写、混合大小写的命令。 1. 添加头文件目录INCLUDE_...

  • CMake之库文件添加

    如果某些头文件的使用需要指明链接库的位置,但你没有在指明。很有可能会出现:error adding sysmbol...

网友评论

      本文标题:CMake教程(3):添加版本号和头文件

      本文链接:https://www.haomeiwen.com/subject/hoayzltx.html