我想创建一个C ++ 11的一个项目,我使用的CMake作为我的构建系统。
我如何能在CMake的配置文件添加一个最小的编译器版本必需?
我想创建一个C ++ 11的一个项目,我使用的CMake作为我的构建系统。
我如何能在CMake的配置文件添加一个最小的编译器版本必需?
据我所知,没有内置支持这样的事情,但你当然可以把它写自己:
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "your.required.gcc.version")
message(FATAL_ERROR "Insufficient gcc version")
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "your.required.msvc.version")
message(FATAL_ERROR "Insufficient msvc version")
endif()
elseif(...)
# etc.
endif()
不过,我建议你实际上考虑一个功能检测方法代替。 也就是说,使用try_compile()
以验证该编译器支持你需要的功能,并且FATAL_ERROR
如果它没有。 这是在CMake的更地道,并有你没有发现合适的最低版本为所有的编译器在那里的好处。
通过CMake 2.8.10启动CMAKE_ <LANG> _COMPILER_VERSION变量可以被用户访问,让编译器版本。 在以前的版本中那些只保留供内部使用,不应由用户代码读取。 他们也不能保证所有的语言进行设置,但C和CXX绝对应该是可用的。
CMake的还包含版本比较(VERSION_LESS,VERSION_EQUAL,VERSION_GREATER),您可以用它来写你的版本验证代码运营。
请记住,你需要找出你拥有其中第一个编译器,然后检查是否有正确的版本。
下面是我的一个项目一个简短的样本:
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
# require at least gcc 4.8
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
message(FATAL_ERROR "GCC version must be at least 4.8!")
endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
# require at least clang 3.2
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.2)
message(FATAL_ERROR "Clang version must be at least 3.2!")
endif()
else()
message(WARNING "You are using an unsupported compiler! Compilation has only been tested with Clang and GCC.")
endif()
您可以检查特定的gcc版本如下:
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
message(FATAL_ERROR "Require at least gcc-5.1")
endif()