代码之家  ›  专栏  ›  技术社区  ›  Karl von Moor

检查cmake中的gcc minor

  •  26
  • Karl von Moor  · 技术社区  · 14 年前

    我想这样做:

    If (GCC_MAJOR >= 4 && GCC_MINOR >= 3)
    
    4 回复  |  直到 11 年前
        1
  •  34
  •   richq luc    8 年前

    使用 if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2) 正如onqtam提到的。这个过时的答案是从2.6cmake时代回来的。

    你可以跑 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()
    

    这将为GCC4.3.1版本打印“4”和“3”。不过,您可以使用CMake的版本检查语法来简化工作并跳过regex:

    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()
    

        2
  •  18
  •   onqtam    9 年前

    从CMake 2.8.10开始 CMAKE_C_COMPILER_VERSION CMAKE_CXX_COMPILER_VERSION

    if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
    
        3
  •  13
  •   Steve Lorimer    9 年前

    if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
        ...
    endif()
    
        4
  •  0
  •   mx0 aleclara95    7 年前

    然而,有一种说法, -dumpfullversion 提供完整版本字符串的。

    gcc -dumpfullversion
    

    应该得到你想要的。在gcc 7中仍然是向后兼容被破坏的。