2016-08-04 2 views
1

Abort makefile if variable not setでアドバイスを受けましたifndefを使用しようとしていますが、機能しません。Makefile - 変数が設定されていない場合にエラーが発生する

のMakefile:

foo: 
     ifndef BAR 
     $(error "Must set BAR") 
     endif 

しかしmake foo BAR=quux動作しません:

Makfile:2: *** "Must set BAR". Stop. 

できますか?空白問題ですか?または私は完全に誤解していますか?

(私はGNU Makeを使用しています)

私も試してみました:

foo: 
ifndef BAR 
$(error "Must set BAR") 
endif 
     echo $(BAR) 

仕事のようなもののようですが、まだであれば、目標のさらに下のMakefileでifndefが呼び出される原因となります(変数を設定する必要はありません)が呼び出されます。

答えて

3

技術的には、それは空白問題ですが、より根本的にはスコープの問題です。

ifndef... endifは、です。を条件とします。そのため、Makeはルールを実行する前に評価します。 ifndefはレシピの一部ではないため、TABを前に付けるべきではありません。これは動作します:

ifndef BAR 
$(error "Must set BAR") # this is a Make error 
endif 

foo: 
ifndef BAR 
    echo "Must set BAR" # this is a shell command 
    exit 1    # this is another shell command 
endif 

しかし、あなたがやったことは、このでした:

foo: 
    ifndef BAR 
    $(error "Must set BAR") 
    endif 

あなたは三行(ifndef...$(error...endif)の前にTABを置くので、これらがコマンドだったと仮定ください、 fooレシピが実行された場合、シェルに渡されます。また、Makeがルールを実行すると、シェルに何かを渡す前に、Make-syntax文$(error...)を展開し、エラーで終了しました。

0

"if"関数をこの目的のために使用できます。 foo : $(if $(BAR),,$(error Must set BAR))

関連する問題