我有一个小游戏引擎,在调试或发布模式下构建时需要定义一些自定义宏。
以下是我的 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> …Run Code Online (Sandbox Code Playgroud) 我有这个场景:
#include <iostream>
class SomeClass
{
public:
int _int;
};
#define DO_SOME_STUFF(ptr) std::cout << /* Print the typeid().hash_code() of the type which ptr is poiting to (int) */;
int main()
{
int SomeClass::* ptr_to_int_member = &SomeClass::_int;
DO_SOME_STUFF(ptr_to_int_member)
}
Run Code Online (Sandbox Code Playgroud)
我想知道ptr指向的是哪种类型(当前是int)。知道哪个类拥有这int也很有用(目前是SomeClass)。