我有一个小游戏引擎,需要在Debug或Release模式下定义一些自定义宏。
这是我的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
都可以很好地运行,但是在Windows系统中使用Visual Studio时,CMAKE_BUILD_TYPE
变量始终为空。我知道原因,这是因为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>
)
$<CONFIG>表达式需要一个或零个参数。
然而,对于每个CONFIG使用4个生成器表达式对我有用。 - OverShifted$<CONFIG:cfgs>
生成器表达式中使用多个变量的CMake 3.19的代码。我会编辑答案。 - vre