我太累了,无法详细解释为什么您的尝试无效:)。然而,您的问题的答案是,不要试图将make预处理器命令和函数与配方脚本混合使用。只要不要把它们混在一起,你就不会对这两个阶段感到困惑。我真不明白为什么这么多人都在拼命写作
eval
配方中的语句。。。奇怪的是,这太普遍了。实际上,这种构造只在最深奥的情况下有用。
无论如何,如果您希望这些变量设置为“在所有其他地方”使用,那么您为什么要在配方中设置它们呢?
我会完全抛弃“所有”目标,并将其写成:
PKG_VER ?= 1.2
TARGET_DEVICE ?= myboard
BUILD_TYPE_CUSTOMER := CUSTOMER
BUILD_TYPE_MFG := MANUFACTURING
BUILD_TYPE := $(BUILD_TYPE_CUSTOMER)
TARGET_COMMON := $(subst _mf,,$(TARGET_DEVICE))
#Check if it is mfg target or customer target
ifneq (,$(findstring _mf,$(TARGET_DEVICE)))
$(info common target name:$(TARGET_COMMON))
BUILD_TYPE := $(BUILD_TYPE_MFG)
endif
$(info build type:$(BUILD_TYPE))
$(info customer build type string:$(BUILD_TYPE_CUSTOMER))
#If it is customer build check package version.
ifneq ($(BUILD_TYPE), $(BUILD_TYPE_MFG))
$(info "inside customer build")
ifneq ($(PKG_VER),)
$(error pkage version not passed)
endif
endif