我正在编写一个makefile,它需要定义一些环境变量。我正在尝试使用类似这样的东西来获取以下内容:
define check-var-defined
ifndef $(1)
$(error $(1) is not defined)
endif
endef
$(call check-var-defined,VAR1)
$(call check-var-defined,VAR2)
$(call check-var-defined,VAR3)
rule1:
#stuff
当我在不带参数的情况下运行make时,我得到的结果是:
$ make
Makefile:7: *** VAR1 is not defined. Stop.
但是,当我使用指定的VAR1运行它时,我得到了相同的错误。
$ make VAR1=hello
Makefile:7: *** VAR1 is not defined. Stop.
你知道为什么这个不起作用吗?我能做些什么来让它工作呢?提前谢谢。
(请注意,我需要检查在运行makefile时是否实际定义了这些变量,因为我需要进一步向下包含另一个makefle,并且在执行此操作之前需要正确设置变量)。
发布于 2019-03-19 03:56:21
defined = $(strip $(filter-out undefined,$(flavor $1)))
ensure-defined = \
$(eval .ensure-defined :=) \
$(foreach V,$(sort $1), \
$(if $(call defined,$V),,$(eval .ensure-defined += $V)) \
) \
$(if $(strip ${.ensure-defined}), \
$(foreach V,${.ensure-defined}, \
$(info NOT DEFINED: $$$V) \
) \
$(error Required variables not defined) \
)
ifFOO = $(if $(call defined,FOO), \
$(info FOO is defined: '${FOO}'), \
$(info FOO not defined) \
)
$(ifFOO)
FOO := foo
$(ifFOO)
$(call ensure-defined,FOO BAR)
all: ; @:
输出:
$ make -f foo.mk
FOO not defined
FOO is defined: 'foo'
NOT DEFINED: $BAR
foo.mk:25: *** Required variables not defined. Stop.
https://stackoverflow.com/questions/20389064
复制相似问题