Ove*_*ted 10 cmake visual-studio visual-c++ 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_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
)
Run Code Online (Sandbox Code Playgroud)
make在 Linux 中使用或效果很好ninja,但是在使用 VisualStudio 的 Windows 上,该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>
)
Run Code Online (Sandbox Code Playgroud)
vre*_*vre 11
您可能想在此处使用生成器表达式。它们在构建时进行评估,因此即使对于 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>
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14448 次 |
| 最近记录: |