1. ホーム
  2. command-line

[解決済み] コマンドラインからMakefileに引数を渡すには?

2022-05-03 01:11:27

質問

コマンドラインから Makefile に引数を渡すには?

を行うことができると理解しています。

$ make action VAR="value"
$ value

Makefile

VAR = "default"
action:
    @echo $(VAR)

次のような動作をさせるにはどうしたらよいでしょうか。

$ make action value
value

どうですか?

$make action value1 value2
value1 value2

解決方法は?

おそらくこれはやってはいけないことでしょう。Makeの動作の基本パターンを壊しているのですから。でも、ここにあります。

action:
        @echo action $(filter-out $@,$(MAKECMDGOALS))

%:      # thanks to chakrit
    @:    # thanks to William Pursell

EDITです。

最初のコマンドを説明する。

$(MAKECMDGOALS) は、コマンドラインで綴られた "targets" のリストで、例えば "action value1 value2" のようなものです。

$@ 自動変数 には、ルールのターゲットの名前(この場合は "action")を指定します。

filter-out は、リストからいくつかの要素を削除する関数です。そのため $(filter-out bar, foo bar baz) は以下を返します。 foo baz (もっと微妙なこともできますが、ここでは微妙なことは必要ありません)。

これらをまとめて $(filter-out $@,$(MAKECMDGOALS)) は、コマンドラインで "action" 以外に指定されたターゲットのリスト、つまり "value1 value2" のようなものを返します。