GNU Makeを使用してルールの外側に変数を表示することは可能ですか?
次のMakefileを考えてみましょう。
x = foo bar baz
ifdef x
@echo $(x)
endif
これによりMakefile:4: *** commands commence before first target. Stop.
ただし、ルールを追加すると機能します。
x = foo bar baz
ifdef x
t:
@echo $(x)
endif
デバッグなどのために変数を出力するルールを追加する必要がありますか?
ボーナス:
ifdef
削除が発生する理由は何ですかMakefile:3: *** missing separator. Stop.
?
x = foo bar baz
@echo $(x)
ベストアンサー1
まあ。しかし、それは役に立たない。
Makefileはシェルスクリプトとは異なることを理解する必要があります。 Makefileは、ターゲットとそのターゲットを作成するために実行する必要があるアクションを指定します。この点を念頭に置いて、Makefileで偽のコマンドを実行することは概念的な問題になります。このコマンドはいつ実行されますか?どのターゲットもこのコマンドを実行しません。
あなたはできます:
MY_VAR := $(shell ls)
all:
@echo MY_VAR IS $(MY_VAR)
私はGNUを仮定していますmake
。これはls
あなたのためにそれをし、出力をMY_VAR
。
追加の目標を試すこともできます。
extra:
@echo $(x)
他のすべての目標の前提条件として追加してください。
利点は、行に区切り@echo $(x)
文字がないためです。この時点で、ファイルにはmake
aがあるターゲットが予想されますが、:
その行には何もありません:
。 (もちろん、新しい変数の割り当てなど他の可能性もあります。)