什么GNU makefile规则可以确保make的版本至少是v3.82?

时间:2012-09-01 18:19:57

标签: version gnu-make

我有一个makefile,在使用旧版本的gmake时会出现非明显的失败。我想要一个规则,检查版本至少是版本3.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?

1 个答案:

答案 0 :(得分:3)

以下是我将如何实现它:

# 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 Make 3.82 NEWS file

  

新的make指令:undefine允许你取消定义一个变量     它似乎从未设置过。 $(flavor)$(origin)都有效     将为这样的变量返回'undefined'。 检测此功能搜索     undefine特殊变量中的.FEATURES