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

CMake: Set different name for #cmakedefine variable

本文关键字:设置 #cmakedefine 变量 CMake      更新时间:2023-10-16

我知道您可以使用CMake的configure_file使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}

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

这更多的是您喜欢的编程风格(配置文件与编译器定义(的问题。

在您的情况下,我将使用add_definitions()或直接修改/附加COMPILE_DEFINITIONS目录属性(使用生成器表达式也支持多配置环境(:

set_property(
    DIRECTORY 
    APPEND 
    PROPERTY 
        COMPILE_DEFINITIONS "BUILD_TYPE_$<UPPER_CASE:$<CONFIG>>"
)

最简化的调试/发布检查

您还可以检查CMake预定义的编译器定义。无需对CMakeLists.txt文件进行修改/添加,您只需检查C/C++代码中的NDEBUG定义(针对跨平台发布版本设置(:

#ifdef NDEBUG
... 
#endif

参考

  • CMake:如何传递预处理器宏
  • 如何检查CMake构建目录构建类型是Debug还是Release
  • 什么预定义的宏可以用来检测带有clang的调试构建