我正在使用CMake在Windows(Visual Studio)以及Linux机器(gcc)上构建我的项目.我想将一些代码标记为"仅调试",就像使用
#ifdef DEBUG
//some logging here
#endif
Run Code Online (Sandbox Code Playgroud)
问题是:CMake"Debug"构建类型中的所有平台上都有哪些编译器定义?DEBUG似乎不存在.(我希望只有在构建类型为Debug时才能进行日志记录或其他任何操作.)
从文档页面:
CMAKE_BUILD_TYPE
指定单配置生成器上的构建类型。
这静态指定将在此构建树中构建哪种构建类型(配置)。可能的值是空的,
Debug,Release,RelWithDebInfo和MinSizeRel。此变量仅对单配置生成器(例如Makefile Generators和Ninja)有意义,即那些在CMake运行以生成生成树时选择单个配置的生成器,而与多配置生成器不同,后者在生成的生成环境中提供对构建配置的选择。有许多按配置的属性和变量(通常遵循SOME_VAR_<CONFIG>无序顺序约定),例如CMAKE_C_FLAGS_<CONFIG>,指定为大写:CMAKE_C_FLAGS_[DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL]。例如,在配置为build type的构建树中Debug,CMake将看到CMAKE_C_FLAGS_DEBUG已将设置添加到CMAKE_C_FLAGS设置。另请参阅CMAKE_CONFIGURATION_TYPES。
我知道之间的差异Debug构建和Release建立,但什么是之间的差异Release,RelWithDebInfo以及MinSizeRel?我猜的RelWithDebInfo意思是创建可调试的二进制文件,并MinSizeRel意味着创建可能的最小大小的二进制文件。
CMAKE_BUILD_TYPE:STRING
如果使用的是Visual Studio之类的IDE,则应使用IDE设置来设置构建类型。请注意,Release和RelWithDebInfo在大多数平台上使用不同的优化级别。
如果要生成生产版本,应该选择Release吗?