10

Makefile 内の define 内で ifeq を実行しようとしていますが、いくつかのエラーが発生しているようで、何か不足しているのではないかと考えています。次の Makefile があります。

$(info ---- start ----)
ifeq ("X","Y")
$(info DOES not appear_1)
endif

define TESTDEF
ifeq ("X","Y")
$(info SHOULD not appear)
# $(error DEFINITELY SHOULD not error...)
endif
endef

$(eval $(call TESTDEF, 1,2,3))

次のエラーが表示されます。

---- start ----
SHOULD not appear
Makefile:14: *** DEFINITELY SHOULD not error....  Stop.

私が見逃しているトリックはありますか?ifeq の内部定義を行うことは可能ですか? (注: これは私のネイティブ GNU 3.81 make と私の mips uclibc クロスコンパイラの両方で発生します)

4

1 に答える 1

14

この関数を実行callすると、Makeは、指定されたパラメーター(この場合は関係ありません)を使用して定義を評価します。したがって、定義に$(info ...)または$(error ...)のようなものが含まれている場合、コメント内であっても、Makeはそれを評価し、結果が表示されます(ドキュメントを参照してください。GNUMake3.81でテストしました)。

必要な動作を得るには、ドル記号をいくつか追加します。

define TESTDEF
ifeq ("X","Y")
$$(info SHALL not appear)
# $$(info DEFINITELY SHALL not error...)
endif
endef

$(eval $(call TESTDEF))
于 2012-11-16T18:32:15.303 に答える