[英]Assigning output name based on c++ header file and cmake command
我有一个 C++ 项目,结构如下:
MyProject
- app
- version.hpp
- appmodule.cpp
- appmodule.cpp
- main.cpp
- CMakeLists.txt
版本在version.hpp
中定义:
// version.hpp
#define VERSION_MAJOR 1
#define VERSION_MINOR 100
#define VERSION_INTERNAL 71
为了生成带有版本信息的 output 文件名,我将以下内容添加到CMakeLists.txt
:
# CMakeLists.txt
file(READ "app/version.hpp" ver)
string(REGEX MATCH "VERSION_MAJOR ([0-9]*)" _ ${ver})
set(VERSION_MAJOR ${CMAKE_MATCH_1})
string(REGEX MATCH "VERSION_MINOR ([0-9]*)" _ ${ver})
set(VERSION_MINOR ${CMAKE_MATCH_1})
string(REGEX MATCH "VERSION_INTERNAL ([0-9]*)" _ ${ver})
set(VERSION_INTERNAL ${CMAKE_MATCH_1})
set(MY_PROJECT_APP app_v${VERSION_MAJOR}_${VERSION_MINOR}_${VERSION_INTERNAL})
add_executable(${MY_PROJECT_APP} app/main.cpp)
为了构建项目,我运行
mkdir -p build
cd build
cmake ..
make
output是app_v1_100_71
基于上面的例子。
但是,现在我想根据编译器传递的 arguments 更改版本号。
因此,我像这样更改了version.hpp
:
// version.hpp (specify different version based at compile time)
#if defined(BUILD_QA_TEST)
#define VERSION_MAJOR 0
#elif defined(BUILD_STAGE)
#define VERSION_MAJOR 1
#else
#define VERSION_MAJOR 2
#endif
#define VERSION_MINOR 100
#define VERSION_INTERNAL 71
这样原string(REGEX MATCH "VERSION_MAJOR ([0-9]*)" _ ${ver})
不再适用,因为它无法解析C宏。
有什么方法可以确定 cmake 应该使用哪个VERSION_MAJOR
?
此外,有没有更好的方法来控制这个项目的版本?
谢谢。
我建议反过来做,并将版本信息从 cmake 转换为 C++ - 而不是相反。
您可以使用 cmake 的configure_file
() function 将 C++ 代码中的版本变量替换为来自 cmake 的信息(例如project VERSION
)。
然后您可以简单地使用OUTPUT_NAME
从您的 cmake 版本变量中构建 output 文件名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.