33

是否可以在 cmake 中检查 GCC 的次要版本号?

我想做这样的事情:

If (GCC_MAJOR >= 4 && GCC_MINOR >= 3)
4

4 回答 4

39

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)如 onqtam 所述使用。这个过时的答案是从 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()

于 2010-10-31T23:34:24.507 回答
22

由于 CMake 2.8.10 有CMAKE_C_COMPILER_VERSIONCMAKE_CXX_COMPILER_VERSION变量正是为此目的,所以你可以这样做:

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
于 2016-02-25T01:44:31.707 回答
22

结合其他2个答案,您可以检查具体的gcc版本如下:

if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
    ...
endif()
于 2016-08-23T21:28:31.810 回答
1

但是,有一个参数-dumpfullversion提供了完整的版本字符串。

gcc -dumpfullversion

应该得到你想要的。gcc 7 中仍然存在向后兼容性问题。

于 2018-05-07T17:26:22.223 回答