2012-09-01 26 views
0

我有一個makefile,在使用舊版gmake時會出現非明顯的故障。我想有一個檢查版本至少是3.82或更高版本的規則。據我已經得到如下面的規則,但比較脆,我真的想要一個比較允許更高版本太:什麼GNU makefile規則可以確保make的版本至少爲v3.82?

GMAKE_VERSION := $(shell gmake --version | head -n 1 | sed 's/GNU Make //') 

.PHONY: testMake 
testMake: 
    @if [ "$(GMAKE_VERSION)" != "3.82" ];    \ 
    then        \ 
     echo >&2 "Unexpected gmakefile version "  \ 
      "$(GMAKE_VERSION), expecting 3.82 or later."; \ 
     false;       \ 
    fi 

什麼GNU的makefile規則可以保證make的版本至少V3。 82?

回答

2

這是我將如何實現它:

# Check Make version (we need at least GNU Make 3.82). Fortunately, 
# 'undefine' directive has been introduced exactly in GNU Make 3.82. 
ifeq ($(filter undefine,$(value .FEATURES)),) 
$(error Unsupported Make version. \ 
    The build system does not work properly with GNU Make $(MAKE_VERSION), \ 
    please use GNU Make 3.82 or above.) 
endif 

的檢查是根據測試.FEATURES內置變量。從GNU使3.82 NEWS file

新制造商的指令:undefine讓你取消定義一個變量,以便 它看起來好像從未設置過。 $(flavor)$(origin)函數 都會返回這個變量的'undefined'。 要檢測此功能搜索 對於undefine中的.FEATURES特殊變量。