🖥

Makefile – makeコマンドのサブコマンド複数を引数として利用することは出来るがコマンド干渉に注意

2024/03/24に公開

概要

本来 make コマンドは

make command1 command2

のようにサブコマンドは「複数のMakeを実行する」という意味なので、ここを引数として使うことは想定されていない。

だがハック的に対応することは出来る。

Makefileの例

$(filter-out $@,$(MAKECMDGOALS)) にサブコマンドの中身が入っている

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

以下コマンドを実行すると x y z が標準出力される

make echo x y z 
# x y z

注意

ただし注意が必要で x y z サブコマンドがそれぞれ Makefileで定義されておらず無視されているだけで、実際には実行自体はされている

つまり以下のようにMakefileを書いていると

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

x:
	@echo sub command X executed
y:
	@echo sub command Y executed

しっかり x も y も実行されているのが分かる

make echo x y z
# x y z
# sub command X
# sub command Y

なのでサブコマンドをハックするよりも、素直にMakeの引数を使った方が干渉の危険がなくて安全そうだ

参考

https://stackoverflow.com/questions/6273608/how-to-pass-argument-to-makefile-from-command-line

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

公開日時

2024-03-18

Discussion