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++ CMake:为#cmakedefine变量设置不同的名称_C++_Cmake_Preprocessor Directive - Fatal编程技术网

C++ CMake:为#cmakedefine变量设置不同的名称

C++ CMake:为#cmakedefine变量设置不同的名称,c++,cmake,preprocessor-directive,C++,Cmake,Preprocessor Directive,我知道您可以使用CMake的配置_文件使CMake变量可用于您的程序。例如,我可以使用 #define ${CMAKE_BUILD_TYPE} 导致 #define Release 然而,为了使我的代码更易于阅读,我宁愿定义 #define BUILD_TYPE_RELEASE 有没有一个简单的方法来解决这个问题?这里有一个相当简单的方法来解决这个问题: 在CMakesLists.txt中: if (NOT CMAKE_BUILD_TYPE) set (CMAKE_BUILD_TY

我知道您可以使用CMake的
配置_文件
使CMake变量可用于您的程序。例如,我可以使用

#define ${CMAKE_BUILD_TYPE}
导致

#define Release
然而,为了使我的代码更易于阅读,我宁愿定义

#define BUILD_TYPE_RELEASE

有没有一个简单的方法来解决这个问题?

这里有一个相当简单的方法来解决这个问题:

CMakesLists.txt
中:

if (NOT CMAKE_BUILD_TYPE)
    set (CMAKE_BUILD_TYPE Release)
endif (NOT CMAKE_BUILD_TYPE)

string (TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE_NAME)

configure_file (config.h.in config.h)
config.h.in
中:

#define BUILD_TYPE_${BUILD_TYPE_NAME}

然而,我仍然很好奇是否有更优雅的解决方案。

这更多是您首选的编程风格(配置文件与编译器定义)的问题

在您的情况下,我将使用或直接修改/追加目录属性(使用还支持多配置环境):

参考资料


这是如何更具可读性的?只要习惯
${}
语法或使用不同的语言即可@usr1234567:
这是如何更可读的
-比什么更可读?Asker并没有提供任何方法来实现这一点(将变量的值转换为大写)。他的“更具可读性”与使用配置头的C(或C++)代码有关,而与CMakeLists.txt脚本无关。
set_property(
    DIRECTORY 
    APPEND 
    PROPERTY 
        COMPILE_DEFINITIONS "BUILD_TYPE_$<UPPER_CASE:$<CONFIG>>"
)
#ifdef NDEBUG
... 
#endif