检查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

是否可以在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(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
,因此这是一个失败的解决方案。