在 cmake 中检查 gcc 次要版本

发布于 2024-09-29 11:41:44 字数 125 浏览 6 评论 0原文

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

我想做这样的事情:

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

Is it possible to check the minor version number of GCC in cmake?

I want to do something like this:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

(り薆情海 2024-10-06 11:41:44

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

Use if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2) as mentioned by onqtam. This obsolete answer was back from the 2.6 CMake days.

You could run gcc -dumpversion and parse the output. Here is one way to do that:

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

That would print "4" and "3" for gcc version 4.3.1. However you can use CMake's version checking syntax to make life a bit easier and skip the regex stuff:

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

离去的眼神 2024-10-06 11:41:44

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

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

Combining the 2 other answers, you can check the specific gcc version as follows:

if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
    ...
endif()
小兔几 2024-10-06 11:41:44

从 CMake 2.8.10 开始,就有了 CMAKE_C_COMPILER_VERSION 和 CMAKE_CXX_COMPILER_VERSION 变量正是用于此目的,因此您可以执行以下操作:

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)

Since CMake 2.8.10 there are the CMAKE_C_COMPILER_VERSION and CMAKE_CXX_COMPILER_VERSION variables exactly for this purpose so you can do this:

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
看海 2024-10-06 11:41:44

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

gcc -dumpfullversion

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

However, there is an argument, -dumpfullversion that provides the full version string.

gcc -dumpfullversion

should get what you want. Still backward compatibility is broken in gcc 7.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文