小编Ove*_*ted的帖子

使用 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
)
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)

cmake visual-studio visual-c++ c++17 visual-studio-2019

10
推荐指数
1
解决办法
1万
查看次数

如何在 C++ 中分解指向成员的指针(获取类和成员类型)?

我有这个场景:

#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)。

c++ pointers pointer-to-member

2
推荐指数
1
解决办法
82
查看次数