visual-studio - 使用 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
)
它在使用make
或ninja
在 Linux 中运行良好,但在使用 VisualStudio 的 Windows 上,该CMAKE_BUILD_TYPE
变量始终为空。我知道原因。这是因为 VS 可以在不重新运行 CMakemake
或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>
)
解决方案
您可能想在此处使用生成器表达式。它们在构建时进行评估,因此即使对于 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>
)
推荐阅读
- python - Python3在列表中的字典中查找值
- javascript - 如何获取对象内元素的索引?
- xml - Powershell 获取值并创建表
- tensorflow2.0 - AttributeError:模块“tensorflow.compat.v2.__internal__”没有属性“tf2”
- xml - 具有相同结构的 2 个不同 XML 文件的 xslt 应用模板
- ios - UITabBarItem 徽章颜色显示为灰色
- javascript - 使用组节点js创建嵌套数组
- python - 语言 = {'name' : request.json['name']} TypeError: 'NoneType' 对象不可下标
- chart.js - 如何更改 react-chartjs-2 中的默认字体系列
- php - Laravel Http 根据请求设置自定义用户代理