我有一个小游戏引擎,在调试或发布模式下构建时需要定义一些自定义宏。
以下是我的 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
)
使用起来效果很好make
or ninja
在 Linux 中,但是在使用 VisualStudio 的 Windows 中,CMAKE_BUILD_TYPE
变量始终为空。我知道原因。这是因为 VS 可以切换构建类型而无需重新运行 CMake,这与make
or 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>
)
您可能想使用生成器表达式 https://cmake.org/cmake/help/latest/manual/cmake-generator-expressions.7.html?highlight=generator%20expression#variable-queries这里。它们在构建时进行评估,因此即使对于 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>
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)