他のメイクファイルを上書きする:=

他のメイクファイルを上書きする:=

Barという変数を持つFooというmakefileがあるとしましょう。

Fooには次のものがあります。

Bar := /some/initial/path
Other_var := ${Bar}/more/paths

次に、デフォルトのmakefileでFooを使用します。

include Path/to/Foo

しかし、Barの値がFooで使用される値になるように、デフォルトのmakefileにBarをどのように設定できますか? evalを使ってみましたが、:=本当に難しいことでした。大きな目標は、Fooのソースを変更することではありません。

答え1

私のGNU make 4.0オンライン情報によると、割り当てにoverrideキーワードを使用すると、通常はコマンドラインをオーバーライドするために使用されます。変数=値設定すると、このキーワードなしで追加の割り当てに値はoverride変更されません。

したがって、デフォルトのmakefileで次のことを試すことができます。

override Bar := myvalueforbar
include Path/to/Foo

答え2

含める前に定義すると、Bar列を使用できます。FooMakefileFoo

たとえば、Makefile各Pythonパッケージには次のものが含まれています(もちろん、各Makefileの最初の2行は異なります)。

UTILNAME:=yaml
PKGNAME:=ruamel.yaml
VERSION:=$(shell python setup.py --version)

include ~/.config/ruamel_util_new/Makefile.inc

共通ルーチンでMakefile.inc配布ファイルを生成する方法を紹介します。

DIST:=dist/$(PKGNAME)-$(VERSION).tar.gz
WHL:=dist/$(PKGNAME)-$(VERSION)-py*-any.whl

$(DIST): $(SRC)
        make check
        python setup.py sdist

関連情報