
この makefile の実行コマンドでバージョンを参照するたびに、そのバージョンは VERSION 変数に保存する必要があり、バージョンが指定されていない場合はデフォルト値を使用する必要があります。
これは私のMakefileです。
export $(BUILDVERSION) = $2
VERS = VABCDE.00.00A002
$(info BUILDVERSION is "$(BUILDVERSION)")
$(info vers is "$(VERS)")
ifneq ($(BUILDVERSION),undefined)
VERSION := $(VERS)
endif
ifneq ($(BUILDVERSION),undefined)
VERSION := $(BUILDVERSION)
endif
$(info VERSION is $(VERSION))
ケース1:実行パラメータを含めると、次の出力が表示されます。
BUILDVERSION is "VABCDE.00.00A001"
vers is VABCDE.00.00A002
VERSION is "VABCDE.00.00A001"
ケース2:実行パラメータを含めないと、このエラーが発生します。
Makefile:1: *** empty variable name. Stop.
Makefile:1: *** empty variable name. Stop.
誰もが私のコードにどのような問題があるのかを理解するのに役立ちますか?
答え1
問題を理解しているかどうかわかりません。
タスクがバージョン番号を外部に提供し、make
コマンドラインにバージョンが提供されていない場合は、デフォルト値を使用します。それでは、makefile
次のようになります。
VERS = VABCDE.00.00A002
$(info BUILDVERSION is "$(BUILDVERSION)")
$(info vers is "$(VERS)")
ifdef BUILDVERSION
VERSION := $(BUILDVERSION)
else
VERSION := $(VERS)
endif
$(info VERSION is $(VERSION))
次のように呼び出すことができます。
make BUILDVERSION="not-default-version"
答え2
export $(BUILDVERSION) = $2
長すぎます。 GNU makeはbashではありません。
呼び出すと$(BUILDVERSION)
何でも拡張され、 a) 行は次のように定義されます。make
make BUILDVERSION=something
something
関数型マクロasとして使用すると、2番目の引数に拡張され、$(call something, ...)
b)次のものがエクスポートされます。空something
make ルールで実行されるコマンドの名前を付けた環境変数です。
未定義または空の文字列として定義されている場合、BUILDVERSION
このエラーが発生しますempty variable name
。
$ make -f - <<'EOT' BUILDVERSION=something
export $(BUILDVERSION) = $2
all:; set | grep ^something; echo XXX $(call something,first,second)
EOT
set | grep ^something; echo XXX second
something=''
XXX second
$2
するいいえmakeコマンドラインに渡された2番目の引数に展開されます。なぜなら... makeはbashではないからです。