0

私はMakefileのいくつかの基本を学んでおり、以下のように簡単な例を書いています:

urname=Chang
givenname=SJ
fullname=$(givenname) $(surname)
hello:
    @echo $(fullname)

surname=Lin

ALL_PACKAGES=
hello1:
ifeq (,$(ALL_PACKAGES))
    @echo There is no package
    $(error $(ALL_PACKAGES) is empty)
else
    @echo there are some packages
endif
    @echo $(ALL_PACKAGES)

ALL_PACKAGES += package1

make hello結果が「SJ Lin」になることは理解できますが、$(姓) は最終的に「Lin」であるためです。

しかし、make hello1なぜ $(ALL_PACKAGES) が if 条件で空であるかの結果 (if は同じように "package1" になると思いますmake hello)?

さらに、最初のエコー メッセージ (「パッケージがありません」) が出力されず、エラー メッセージだけが表示されるのはなぜですか?

先生たちに感謝します。

4

1 に答える 1

1
  1. make hello"SJ Lin" ではなく "Jay Lin" が生成されます。「SJ」をどこから入手したのかわかりません。

  2. ALL_PACKAGES解析のその時点では空であるため、その結果が得られます。これifeqは、実際にターゲットの実行とビルドを開始する前に、makefile の解析時に処理されます。

  3. makeターゲットの実行とビルドを開始する前に、makefile の解析中にエラー メッセージが出力されます (終了します)。

  4. 行をコメントアウトすると、メッセージ (解析のその時点での状態のために含まれる) と、後で実際の処理中に展開されるの両方$(errorから 2 つの出力が得られます。make hello1There is no packageALL_PACKAGESpackage1$(ALL_PACKAGES)make

于 2013-04-17T17:31:02.590 に答える