ファイルの生成
my_test:
ifdef $(toto)
@echo 'toto is defined'
else
@echo 'no toto around'
endif
予想される動作
$ make my_test
no toto around
$ make my_test toto
toto is defined
現在の行動
$ make my_test
no toto around
$ make my_test toto
no toto around
make: *** No rule to make target `toto'. Stop.
実行すると、make my_test
予想どおりelseテキストが表示されますno toto around
。しかし、
make my_test toto
no toto around
make: *** No rule to make target `toto'. Stop.
ファイルバージョンの作成
$ make -v
GNU Make 3.81
SLEバージョン
$ cat /etc/*release
VERSION_ID="11.4"
PRETTY_NAME="SUSE Linux Enterprise Server 11 SP4"
ポリスチレン
ポイントはmake my_test
ifを指定することですtoto
。toto
指定しない場合、コマンドは自動的に実行されます。
答え1
totoの周りのドルを削除し、別の方法でコマンドラインからtotoを渡す必要があります。
コマンドライン
make toto=1 my_test
ファイルの生成
my_test:
ifdef toto
@echo 'toto is defined'
else
@echo 'no toto around'
endif
答え2
これらのMakefileコンテンツを使用できます。秘訣は次のとおりです。filter
機能:
my_test:
ifeq (toto, $(filter toto,$(MAKECMDGOALS)))
@echo 'toto is defined'
else
@echo 'no toto around'
endif
@echo run command $(if $(filter toto,$(MAKECMDGOALS)),--verbose,--normally)
%:
@:
結果:
$ make my_test
no toto around
run command --normally
$ make my_test toto
toto is defined
run command --verbose
$ make toto my_test
toto is defined
run command --verbose
$ make my_test totofofo
no toto around
run command --normally
答え3
Makefileはトリックにすることができます。通常、私は次のことを行います。
# turn them into do-nothing targets
$(eval toto:;@:)
my_test:
ifeq (toto, $(filter toto,$(MAKECMDGOALS)))
@echo 'toto is defined'
else
@echo 'no toto around'
endif