GNU Makeを使用してルールの外側に変数を表示することは可能ですか?

GNU Makeを使用してルールの外側に変数を表示することは可能ですか?

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)文字がないためです。この時点で、ファイルにはmakeaがあるターゲットが予想されますが、:その行には何もありません:。 (もちろん、新しい変数の割り当てなど他の可能性もあります。)

おすすめ記事