Makefile:发出警告gcc版本低于4.8.0 将Makefile参数添加到gcc

Makefile:发出警告gcc版本低于4.8.0 将Makefile参数添加到gcc,gcc,makefile,version-detection,Gcc,Makefile,Version Detection,某个函数包含以下调用: CFLAGS = -I$(RM_INCLUDE_DIR) -Wall -g -fPIC -lc -lm -Og -std=gnu99 已将-Og参数引入到。我的OSX包含GCC4.2.1,它失败了,出现了一条相当混乱的错误消息 问题 是否有一种优雅而标准的方法(即,在任何POSIX环境下工作)来检查gcc的版本并在其低于4.8时发出警告 问题在于,gcc--version具有不同的输出格式: $ gcc --version gcc (Homebrew gcc 5.3.0

某个函数包含以下调用:

CFLAGS = -I$(RM_INCLUDE_DIR) -Wall -g -fPIC -lc -lm -Og -std=gnu99
已将
-Og
参数引入到。我的OSX包含GCC4.2.1,它失败了,出现了一条相当混乱的错误消息

问题 是否有一种优雅而标准的方法(即,在任何POSIX环境下工作)来检查gcc的版本并在其低于4.8时发出警告

问题在于,
gcc--version
具有不同的输出格式:

$ gcc --version
gcc (Homebrew gcc 5.3.0) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/c++/4.2.1
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin16.4.0
Thread model: posix

$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
我的问题 是否有一种优雅、与Makefile兼容且标准的方法来检查gcc的版本,并在版本低于4.8.x时发出警告?

下面,我以以下代码结束:

# Warn if gcc version is lower than 4.8 (-Og was introduced in this version)
MIN_GCC_VERSION = "4.8"
GCC_VERSION := "`gcc -dumpversion`"
IS_GCC_ABOVE_MIN_VERSION := $(shell expr "$(GCC_VERSION)" ">=" "$(MIN_GCC_VERSION)")
ifeq "$(IS_GCC_ABOVE_MIN_VERSION)" "1"
    GCC_VERSION_STRING := "GCC version OK $(GCC_VERSION) >= $(MIN_GCC_VERSION)"
else
    GCC_VERSION_STRING := "ERROR: gcc version $(GCC_VERSION) is lower than $(MIN_GCC_VERSION), 'gcc -Og' might fail."
endif
注意事项:

  • 使用
    gcc-dumpversion
    避免在
    gcc-version
  • 使用
    shell expr
    比较版本

感谢并感谢您的宝贵意见

这对你有帮助吗?这足够优雅吗?值得注意的是,更现代的MacOS版本根本不提供GCC。相反,它们提供了一个
gcc
程序,实际上它只是
clang
的一个链接。这就是为什么输出看起来如此不同:即使您键入的命令是
gcc
,系统运行的编译器也完全不同。您将无法使用GCC版本号来比较Clang/LLVM版本。MacOS的旧版本与GCC的旧版本一起提供的原因是,苹果将与新GPLv3下的软件无关,因为他们只能使用GNU软件的旧版本。