一 内容
-
在 CMake Tutorial1_1 最简单的例子 基础上修改。
-
主要说明 如何将CMake的变量值传递给代码源文件。
-
关于 project命令,其语法如下:
project(<PROJECT-NAME> [<language-name>...]) project(<PROJECT-NAME> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] [DESCRIPTION <project-description-string>] [HOMEPAGE_URL <url-string>] [LANGUAGES <language-name>...])
-
对于使用 option VERSION,CMake将定义以下变量
PROJECT_VERSION, <PROJECT-NAME>_VERSION PROJECT_VERSION_MAJOR, <PROJECT-NAME>_VERSION_MAJOR PROJECT_VERSION_MINOR, <PROJECT-NAME>_VERSION_MINOR PROJECT_VERSION_PATCH, <PROJECT-NAME>_VERSION_PATCH PROJECT_VERSION_TWEAK, <PROJECT-NAME>_VERSION_TWEAK
- 从CMake 3.12开始,如果从最根部的CMakeLists.txt中调用project()命令,版本号也将存储于变量CMAKE_PROJECT_VERSION中。
- 修改CMakeLists.txt
# 设置CMake最低版本 cmake_minimum_required(VERSION 3.16) # 设置项目名称及版本 project(Tutorial VERSION 1.0) # 生成可执行文件 add_executable(Tutorial main.cc) # -----------------------add---------------------------- # 配置文件:拷贝文件到另一位置,并且修改其内容 configure_file(TutorialConfig.h.in TutorialConfig.h) # 打印信息 message("PROJECT_BINARY_DIR=${PROJECT_BINARY_DIR}") # 增加include路径到目标,否则会无法include生成的TutorialConfig.h target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}")
- 创建TutorialConfig.h.in并编辑内容
// the configured options and setting for Tutorial #define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@ #define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
- 修改 main.cc
#include <iostream> #include "TutorialConfig.h" // cmake时会自动生成 int main() { std::cout << "version:" << Tutorial_VERSION_MAJOR << "." << Tutorial_VERSION_MINOR << std::endl; return 0; }
二 构建
- 与Tutorial1_1相同,创建并进入构建目录
lee@leedeMacBook-Pro cmake_tutorial % cd step1_2 lee@leedeMacBook-Pro step1_2 % ls CMakeLists.txt TutorialConfig.h.in main.cc lee@leedeMacBook-Pro step1_2 % mkdir build lee@leedeMacBook-Pro step1_2 % cd build lee@leedeMacBook-Pro build %
- 构建
lee@leedeMacBook-Pro build % cmake .. -- Configuring done -- Generating done -- Build files have been written to: /Users/lee/research/cmake_learn/cmake_tutorial/step1_2/build lee@leedeMacBook-Pro build % ls CMakeCache.txt Makefile cmake_install.cmake CMakeFiles TutorialConfig.h
- 注意此时生成了TutorialConfig.h文件
- 查看TutorialConfig.h
lee@leedeMacBook-Pro build % cat TutorialConfig.h // the configured options and setting for Tutorial #define Tutorial_VERSION_MAJOR 1 #define Tutorial_VERSION_MINOR 0
- TutorialConfig.h拷贝TutorialConfig.h.in的内容,并将相关变量用其值进行了替换。
- build&run
lee@leedeMacBook-Pro build % cmake --build . Scanning dependencies of target Tutorial [ 50%] Building CXX object CMakeFiles/Tutorial.dir/main.cc.o [100%] Linking CXX executable Tutorial [100%] Built target Tutorial lee@leedeMacBook-Pro build % ./Tutorial version:1.0
三 Github
- 代码已上传Github