web-dev-qa-db-ja.com

makefileにオプションを渡す

Makefile

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を実行すると、予想どおりno toto aroundのelseテキストが表示されます。しかしながら

make my_test toto
no toto around
make: *** No rule to make target `toto'.  Stop.

Makefileバージョン

 $ make -v
   GNU Make 3.81

SLEバージョン

$ cat /etc/*release
  VERSION_ID="11.4"
  PRETTY_NAME="SUSE Linux Enterprise Server 11 SP4"

PS

ポイントは、totoを指定するとmake my_testを冗長にし、totoを指定しないと、コマンドはサイレントで実行されます。

9
smarber

Totoの周りのドルを削除し、コマンドラインからtotoを別の方法で渡す必要があります

コマンドライン

make toto=1  my_test

メイクファイル

my_test:
ifdef toto
        @echo 'toto is defined'
else
        @echo 'no toto around'
endif
13
amisax