检查cmake中的gcc次要项
是否可以在cmake中检查GCC的次要版本号 我想这样做:检查cmake中的gcc次要项,gcc,build,cmake,cross-platform,version-detection,Gcc,Build,Cmake,Cross Platform,Version Detection,是否可以在cmake中检查GCC的次要版本号 我想这样做: If (GCC_MAJOR >= 4 && GCC_MINOR >= 3) 如onqtam所述,使用if(CMAKE\U CXX\U编译器\U版本\U更高版本4.2)。这个过时的答案是从2.6天的CMake中恢复过来的 您可以运行gcc-dumpversion并解析输出。有一种方法可以做到这一点: if (CMAKE_COMPILER_IS_GNUCC) execute_process(COMMAN
If (GCC_MAJOR >= 4 && GCC_MINOR >= 3)
如onqtam所述,使用if(CMAKE\U CXX\U编译器\U版本\U更高版本4.2)
。这个过时的答案是从2.6天的CMake中恢复过来的
您可以运行gcc-dumpversion
并解析输出。有一种方法可以做到这一点:
if (CMAKE_COMPILER_IS_GNUCC)
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
OUTPUT_VARIABLE GCC_VERSION)
string(REGEX MATCHALL "[0-9]+" GCC_VERSION_COMPONENTS ${GCC_VERSION})
list(GET GCC_VERSION_COMPONENTS 0 GCC_MAJOR)
list(GET GCC_VERSION_COMPONENTS 1 GCC_MINOR)
message(STATUS ${GCC_MAJOR})
message(STATUS ${GCC_MINOR})
endif()
这将为gcc版本4.3.1打印“4”和“3”。但是,您可以使用CMake的版本检查语法来简化操作,并跳过正则表达式:
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
OUTPUT_VARIABLE GCC_VERSION)
if (GCC_VERSION VERSION_GREATER 4.3 OR GCC_VERSION VERSION_EQUAL 4.3)
message(STATUS "Version >= 4.3")
endif()
自CMake 2.8.10以来,有
CMake\u C\u编译器版本
和CMake\u CXX\u编译器版本
变量正好用于此目的,因此您可以执行以下操作:
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
结合其他两个答案,您可以检查具体的gcc版本,如下所示:
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
...
endif()
但是,有一个参数,
-dumpfullversion
提供完整版本字符串
gcc -dumpfullversion
你应该得到你想要的。gcc 7中仍然存在向后兼容性问题。我发现这非常有用,谢谢。有没有办法从版本号中删除换行符?从gcc 7开始,
-dumpversion
现在只输出7
,因此这是不正确的。更喜欢onqtam的答案,它更具可移植性。2.8.10现在有了变量,但您可能想知道gcc有-dumpFullVersion可能重复的如果我猜对了您的意图,这将错误检测gcc 5.0、5.1、6.0、6.1等。这应该是公认的答案:更短、更简单,为所有当前和将来的编译器版本定义良好。现在(richq)接受的答案有一个问题:-dumpversion
现在在gcc 7中返回7
,因此这是一个失败的解决方案。