繁体   English   中英

根据 c++ header 文件和 Z272CEADB8458515B2AE4B5630A6029 分配 output 名称

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM