変数をコマンドライン引数として GNU Makefile に渡すことはできますか? 言い換えると、最終的に Makefile で変数になる引数をいくつか渡したいのです。
ベストアンサー1
makefile の外部から変数を設定するには、いくつかのオプションがあります。
環境から- 各環境変数は同じ名前と値を持つ makefile 変数に変換されます。
-e
オプション(別名)をオンに設定することもできます--environments-override
。環境変数はmakefileに設定された割り当てを上書きします(これらの割り当て自体がoverride
指令ただし、これは推奨されておらず、?=
代入 (条件付き変数代入演算子、変数がまだ定義されていない場合にのみ効果があります) を使用する方がはるかに優れており、柔軟性があります。FOO?=default_value_if_not_set_in_environment
特定の変数は環境から継承されないことに注意してください。
MAKE
スクリプトの名前から取得されますSHELL
は、makefile 内で設定されるか、またはデフォルトで設定されます/bin/sh
(理由: コマンドは makefile 内で指定され、シェル固有です)。
コマンドラインから-
make
ターゲットと混合して、コマンドラインの一部として変数の割り当てを行うことができます。make target FOO=bar
しかし、makefile内の変数へのすべての割り当て
FOO
は、override
指令代入時に使用します。(効果は環境変数のオプションの場合と同じです-e
)。親 Make からのエクスポート- Makefile から Make を呼び出す場合、通常は次のように変数の割り当てを明示的に記述しないでください。
# Don't do this! target: $(MAKE) -C target CC=$(CC) CFLAGS=$(CFLAGS)
代わりに、これらの変数をエクスポートする方がよい解決策かもしれません。変数をエクスポートすると、すべてのシェル呼び出しの環境にその変数が組み込まれ、これらのコマンドからの Make 呼び出しでは、上記で指定したようにこれらの環境変数が選択されます。
# Do like this CFLAGS=-g export CFLAGS target: $(MAKE) -C target
引数なしでを使用すると、すべての変数をエクスポートすることもできます。
export