
この 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
tl;dr; GNU make は bash ではありません。
は、として$(BUILDVERSION)
呼び出された場合にのみ、何らかの形に展開されます。その結果、その行は a)として定義されます。make
make BUILDVERSION=something
something
関数のようなマクロとして使用されるときに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 は bash ではないため、make のコマンドラインで渡される 2 番目の引数に展開されます。