【发布时间】:2011-05-02 19:04:49
【问题描述】:
是否可以在cmake中查看GCC的次要版本号?
我想做这样的事情:
If (GCC_MAJOR >= 4 && GCC_MINOR >= 3)
【问题讨论】:
-
如果我猜对了你的意图,这将错误检测 GCC 5.0、5.1、6.0、6.1 等。
标签: gcc build cmake cross-platform version-detection
是否可以在cmake中查看GCC的次要版本号?
我想做这样的事情:
If (GCC_MAJOR >= 4 && GCC_MINOR >= 3)
【问题讨论】:
标签: gcc build cmake cross-platform version-detection
使用 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()
【讨论】:
-dumpversion 现在只输出7,所以这被破坏了。更喜欢 onqtam 的答案,它更便携。
自 CMake 2.8.10 起,CMAKE_C_COMPILER_VERSION 和 CMAKE_CXX_COMPILER_VERSION 变量正是用于此目的,因此您可以这样做:
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
【讨论】:
-dumpversion 现在在 gcc 7 中返回7,所以这是一个错误的解决方案。
结合其他2个答案,可以查看具体gcc版本如下:
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
...
endif()
【讨论】:
但是,有一个参数 -dumpfullversion 提供了完整的版本字符串。
gcc -dumpfullversion
应该得到你想要的。在 gcc 7 中仍然存在向后兼容性问题。
【讨论】: