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

makeのバージョンが少なくともv3.82であることを保証できるGNUmakefileルールは何ですか?

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 に答える