如何解决使用 CMake 时在 Visual Studio 中检测构建类型调试/发布
我有一个小游戏引擎,当它在调试或发布模式下构建时,我需要在其中定义一些自定义宏。
这里是我的 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_BUILD_TYPE
变量始终为空。我知道原因。这是因为与 make
或 ninja
生成器不同,VS 可以在不重新运行 CMake 的情况下切换构建类型。
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>
)
解决方法
您可能想在此处使用 generator expressions。它们在构建时进行评估,因此即使对于 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>
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。