MakefileでGNU makeが使用されているかどうかを確認するには?

MakefileでGNU makeが使用されているかどうかを確認するには?

私はGNU Makeがこれまでで最も一般的に使用されていることを知っていますが、GNU Makeが実際に使用されているmakeプログラムであることを確認する方法を探しています。 Makefileで印刷できる特別な変数はありますか?たとえば、次のようになります。

@echo "$(MAKE_VERSION)"

GNU Makeと他のバリエーションの両方がインストールされている場合はどうなりますか?

which make
/usr/bin/make

答え1

使用:

$(MAKE) --version

ここで働いてください。私の結果は次のとおりです

make --version
GNU Make 3.82
Built for i686-pc-linux-gnu
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

答え2

~からGNU製作マニュアル:

デフォルトでは、makeはmakefileを探すときに次の名前を順番に試みます:GNUmakefile、makefile、およびMakefile。

したがって、makeファイルに名前を付けると、GNUmakefileGNU makeからのみ読み取ることができ、他のmakeからは読み取れないことを保証する必要があります。

答え3

~からここmakefileでこれを行う唯一の方法は次のとおりです。

  ifeq (3.81,$(firstword $(sort $(MAKE_VERSION) 3.81)))
    # stuff that requires make-3.81 or higher
  endif

関連情報