5

当使用旧版本的 gmake 时,我有一个 makefile 会出现不明显的故障。我想要一个规则来检查版本至少是 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?

4

1 回答 1

6

这是我将如何实现它:

# 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 文件

新的 make 指令:undefine允许您取消定义变量,使其看起来好像从未设置过。$(flavor)和函数都$(origin)将为此类变量返回“未定义”。要检测此功能,请undefine.FEATURES特殊变量中搜索。

于 2012-09-01T20:53:56.173 回答