Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于C++头文件和CMAGE命令分配输出名称 我有一个C++项目,如下结构: MyProject - app - version.hpp - appmodule.cpp - appmodule.cpp - main.cpp - CMakeLists.txt_C++_Cmake_Versioning_Conditional Compilation - Fatal编程技术网

基于C++头文件和CMAGE命令分配输出名称 我有一个C++项目,如下结构: MyProject - app - version.hpp - appmodule.cpp - appmodule.cpp - main.cpp - CMakeLists.txt

基于C++头文件和CMAGE命令分配输出名称 我有一个C++项目,如下结构: MyProject - app - version.hpp - appmodule.cpp - appmodule.cpp - main.cpp - CMakeLists.txt,c++,cmake,versioning,conditional-compilation,C++,Cmake,Versioning,Conditional Compilation,版本在version.hpp中定义: //version.hpp 定义主要版本1 定义版本\u小100 定义版本_内部71 为了生成带有版本信息的输出文件名,我将以下内容添加到CMakeLists.txt中: 为了构建项目,我运行 mkdir-p构建 光盘制作 克马克。。 制作 根据上述示例,输出为app_v1_100_71 但是,现在我想根据编译器传递的参数更改版本号 因此,我将version.hpp更改为: //version.hpp在编译时指定不同的版本 如果定义了构建质量保证测试 定义版

版本在version.hpp中定义:

//version.hpp 定义主要版本1 定义版本\u小100 定义版本_内部71 为了生成带有版本信息的输出文件名,我将以下内容添加到CMakeLists.txt中:

为了构建项目,我运行

mkdir-p构建 光盘制作 克马克。。 制作 根据上述示例,输出为app_v1_100_71

但是,现在我想根据编译器传递的参数更改版本号

因此,我将version.hpp更改为:

//version.hpp在编译时指定不同的版本 如果定义了构建质量保证测试 定义版本0 elif定义的构建阶段 定义主要版本1 其他的 定义主要版本2 恩迪夫 定义版本\u小100 定义版本_内部71 通过这种方式,原始stringREGEX将匹配版本_MAJOR[0-9]*.{ver} 不再适用,因为它无法分析C宏

是否有任何方法来确定cmake应该使用哪个版本

此外,有没有更好的方法来版本化这个项目


谢谢。

< P>我建议另做一个,把版本信息从CGOST转换成C++——而不是相反。

可以使用cGuess的函数替换C++代码中的版本变量,并从源代码Case.Project版本中获得信息。

您可以简单地使用您的CMASE版本变量来构建输出文件名。

< P>我推荐另一种方式来做,并将版本信息从CGuSE转换成C++——而不是相反。

可以使用cGuess的函数替换C++代码中的版本变量,并从源代码Case.Project版本中获得信息。
然后,您可以简单地使用从您的cmake版本变量构建输出文件名。

肯定会起作用,除非使用包含qa版本作为其自身配置的多重配置。…肯定会起作用,除非使用包含qa版本作为其自身配置的多重配置。。。。
# 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)