实现思路
- 获取编译器信息:在 CMake 中使用
CMAKE_CXX_COMPILER_ID
获取编译器标识,使用 CMAKE_CXX_COMPILER_VERSION
获取编译器版本。
- 判断构建配置:在 CMake 中可以通过
CMAKE_BUILD_TYPE
判断当前构建类型。
- 传递信息到 C++ 代码:通过 CMake 的
add_definitions
或 set_target_properties
等方式将相关信息以预处理宏的形式传递到 C++ 代码中。
- 在 C++ 代码中判断并报错:在 C++ 代码中使用
#ifdef
等预处理指令结合传递过来的宏,根据不同条件使用 #error
输出针对性错误信息。
CMake 配置关键代码示例
# 获取编译器信息
message(STATUS "Compiler ID: ${CMAKE_CXX_COMPILER_ID}")
message(STATUS "Compiler Version: ${CMAKE_CXX_COMPILER_VERSION}")
# 判断构建类型并设置相应宏
if(CMAKE_BUILD_TYPE STREQUAL "Release")
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
add_definitions(-DRELEASE_WITH_OLD_GCC)
endif()
endif()
C++ 代码关键部分代码示例
#ifdef RELEASE_WITH_OLD_GCC
#error "In Release configuration, GCC compiler version below 8.0 may cause some optimization issues."
#endif