Visual studio 使用CMake时在visual studio中检测生成类型(调试/发布)
我有一个小游戏引擎,当它在调试或发布模式下构建时,我需要在其中定义一些自定义宏 下面是我的CMake脚本的几行代码,它应该可以做到这一点: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
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的代码,它在$
生成器表达式中支持多个变量。我将编辑答案。