2017-02-23 28 views
2

Makefile參數gcc

一定Makefile` in an Open-Source project包含以下電話:的Makefile:警告的Emit gcc版本低於4.8.0

CFLAGS = -I$(RM_INCLUDE_DIR) -Wall -g -fPIC -lc -lm -Og -std=gnu99 

-Og參數被引入到gcc 4.8。我的OSX包含gcc 4.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?

+1

確實[這個問題](http://stackoverflow.com/questions/5188267/checking-the-gcc-version-in-a-makefile)幫助你嗎?那夠優雅嗎? – sycko

+1

只需注意一點,更現代的MacOS版本根本不提供GCC。相反,他們提供了一個'gcc'程序,它實際上只是一個鏈接/包裝'clang'。這就是爲什麼輸出看起來如此不同:即使您鍵入的命令是「gcc」,系統也會運行一個完全不同的編譯器。您將無法使用GCC版本號來比較Clang/LLVM版本。之前版本的GCC附帶的舊版MacOS的原因是Apple在新的GPLv3下沒有任何與軟件有關的功能,因此他們被舊版本的GNU軟件所困住。 – MadScientist

回答

1

Checking the gcc version in a Makefile?,最後我用下面的代碼:

# 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比較版本

謝謝syckomadscientist爲您有用的意見!