【问题标题】:Check gcc minor in cmake在 cmake 中检查 gcc 次要
【发布时间】:2011-05-02 19:04:49
【问题描述】:

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

我想做这样的事情:

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

【问题讨论】:

标签: gcc build cmake cross-platform version-detection


【解决方案1】:

使用 onqtam 提到的if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 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()

【讨论】:

  • 我发现这真的很有用,谢谢。有没有办法从版本号中去除换行符?
  • 从 gcc 7 开始,-dumpversion 现在只输出7,所以这被破坏了。更喜欢 onqtam 的答案,它更便携。
  • 2.8.10 现在有这个变量,但你可能想知道 gcc 有 -dumpfullversion
【解决方案2】:

自 CMake 2.8.10 起,CMAKE_C_COMPILER_VERSIONCMAKE_CXX_COMPILER_VERSION 变量正是用于此目的,因此您可以这样做:

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)

【讨论】:

  • 这应该是公认的答案:更短、更简单、为所有当前和未来的编译器版本定义良好。现在接受的答案(由richq)有一个问题:-dumpversion 现在在 gcc 7 中返回7,所以这是一个错误的解决方案。
【解决方案3】:

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

if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
    ...
endif()

【讨论】:

    【解决方案4】:

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

    gcc -dumpfullversion
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多