根据 CMAKE_CONFIGURATION_TYPES 生成预处理器定义

Generate preprocessor definitions based on CMAKE_CONFIGURATION_TYPES

我想使用 cmake 生成一个具有两个配置的 Visual Studio 项目。我希望 cmake 为这些配置定义不同的预处理器符号。

我用下面的命令生成项目

cmake -B intermediate/cmake -G "Visual Studio 16 2019" -T v142 -DCMAKE_GENERATOR_PLATFORM=x64

在我的 CMakeLists.txt 中,我定义了配置:

if(CMAKE_CONFIGURATION_TYPES)
  set(CMAKE_CONFIGURATION_TYPES Debug Release)
endif()

现在,我该如何定义每个配置的预处理器定义?快速搜索建议不要使用 if(CMAKE_BUILD_TYPE STREQUAL "Release"),因为它不适用于多配置生成器。

在多配置生成器中处理特定配置细节的传统方法是使用 generator expressions

生成器表达式允许您指定仅在生成时根据生成器的当前状态(例如当前构建配置)展开的符号、值、标志等。

例如,您可以使用 -D 标志和 target_compile_definitions:

定义自定义预处理器定义
target_compile_definitions(MyTarget PRIVATE
  $<$<CONFIG:Debug>:DEBUG_ONLY=1>
  $<$<CONFIG:Release>:RELEASE_ONLY=2>
  FOO=3
)

(此示例用于 PRIVATE 定义。根据需要将其替换为 PUBLICINTERFACE。)

这会将 -DDEBUG_ONLY=1 添加到 MyTarget(用于调试版本)、-DRELEASE_ONLY=2(用于发布版本)和 -DFOO=3(用于所有版本)。


另请参阅此 relevant/similar 问题: