一点背景知识:我正在 SFML 中编写一个游戏,并且我希望在发布版本中省略某些代码行。我想在编译时检查构建类型,这样就不会影响游戏的性能。
void Tile::draw(sf::RenderTarget& target, sf::RenderStates states) const {
states.transform *= getTransform();
target.draw(m_sprite, states);
#if(DEBUG)
target.draw(m_collision_shape, states);
#endif
}
Run Code Online (Sandbox Code Playgroud)
我对 CMake 世界比较陌生,所以我什至不知道这是否可能。
编辑: 可能值得一提的是我使用 ninja 作为构建系统。
这就是您通常可以这样做的方式(适用于任何生成器):
add_executable(${PROJECT_NAME} main.cpp)
target_compile_definitions(${PROJECT_NAME} PRIVATE "DEBUG=$<IF:$<CONFIG:Debug>,1,0>")
Run Code Online (Sandbox Code Playgroud)
如果您的每个目标都需要它,您可以在顶部 CMake 文件中使用以下内容(如果您有多个 with add_subdirectory),并且在创建目标之前(这不是必需的,但不会那么混乱)。正如 Alex Reinking 正确纠正的那样,我们可以使用更简单的条件,因为$<CONFIG:Debug>已经给出了1或0。
因此,应用上述所有内容,我们得到这样的结果:
add_compile_definitions("DEBUG=$<CONFIG:Debug>")
add_executable(${PROJECT_NAME} main.cpp)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8296 次 |
| 最近记录: |