Visual studio 使用CMake时在visual studio中检测生成类型(调试/发布)

Visual studio 使用CMake时在visual studio中检测生成类型(调试/发布),visual-studio,visual-c++,cmake,c++17,visual-studio-2019,Visual Studio,Visual C++,Cmake,C++17,Visual Studio 2019,我有一个小游戏引擎,当它在调试或发布模式下构建时,我需要在其中定义一些自定义宏 下面是我的CMake脚本的几行代码,它应该可以做到这一点: if (CMAKE_BUILD_TYPE STREQUAL "Debug") set(OE_BUILD_TYPE_DEFINE "OE_DEBUG") endif() if (CMAKE_BUILD_TYPE STREQUAL "Release") set(OE_BUILD

我有一个小游戏引擎,当它在调试或发布模式下构建时,我需要在其中定义一些自定义宏

下面是我的CMake脚本的几行代码,它应该可以做到这一点:

if (CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(OE_BUILD_TYPE_DEFINE "OE_DEBUG")
endif()
    
if (CMAKE_BUILD_TYPE STREQUAL "Release")
    set(OE_BUILD_TYPE_DEFINE "OE_RELEASE")
endif()

if (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
    set(OE_BUILD_TYPE_DEFINE "OE_DEBUG")
endif()

if (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
    set(OE_BUILD_TYPE_DEFINE "OE_RELEASE")
endif()

target_compile_definitions(OverEngine PRIVATE
    "_CRT_SECURE_NO_WARNINGS"
    "GLFW_INCLUDE_NONE"

    PUBLIC
    OE_BUILD_TYPE_DEFINE
)
在Linux中使用
make
ninja
非常有效,但是在使用VisualStudio的Windows上,
CMAKE\u BUILD\u类型
变量始终为空。我知道原因。这是因为VS可以在不重新运行CMake的情况下切换构建类型,而不像
make
ninja
生成器

Premake有一个名为
filter
的东西,它工作得很好,但出于其他原因,我现在不使用它

我该如何设置

如果需要,我将使用VisualStudio 2019 16.7.2和CMake 3.18.2

编辑: 通过将这些行替换为以下行进行修复:

target_compile_definitions(OverEngine PRIVATE
    "_CRT_SECURE_NO_WARNINGS"
    "GLFW_INCLUDE_NONE"

    PUBLIC
    $<$<CONFIG:Debug>:OE_DEBUG>
    $<$<CONFIG:Release>:OE_RELEASE>

    $<$<CONFIG:RelWithDebInfo>:OE_DEBUG>
    $<$<CONFIG:MinSizeRel>:OE_RELEASE>
)
target\u compile\u定义(OverEngine PRIVATE
“\u CRT\u安全\u无警告”
“GLFW_包括_无”
公开的
$
$
$
$
)
您可能希望在此处使用。它们在生成时进行评估,因此即使对于Visual Studio或Xcode等多配置生成器,也会设置生成类型

target_compile_definitions(OverEngine
    PRIVATE
      _CRT_SECURE_NO_WARNINGS
      GLFW_INCLUDE_NONE
    PUBLIC
      $<$<CONFIG:Debug>:OE_DEBUG>
      $<$<CONFIG:RelWithDebInfo>:OE_DEBUG>
      $<$<CONFIG:Release>:OE_RELEASE>
      $<$<CONFIG:MinSizeRel>:OE_RELEASE>
)
target\u compile\u定义(OverEngine
私有的
_CRT\u安全\u无警告
GLFW_包括_无
公开的
$
$
$
$
)

这段代码给了我一个错误:
$表达式需要一个或零个参数。
如何为每个配置使用4个生成器表达式对我有效。我的错是,我发布了CMake 3.19的代码,它在
$
生成器表达式中支持多个变量。我将编辑答案。