首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用GNU-make函数检查是否定义了变量

使用GNU-make函数检查是否定义了变量
EN

Stack Overflow用户
提问于 2013-12-05 08:30:13
回答 1查看 4.5K关注 0票数 4

我正在编写一个makefile,它需要定义一些环境变量。我正在尝试使用类似这样的东西来获取以下内容:

代码语言:javascript
复制
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时,我得到的结果是:

代码语言:javascript
复制
$ make
Makefile:7: *** VAR1 is not defined. Stop.

但是,当我使用指定的VAR1运行它时,我得到了相同的错误。

代码语言:javascript
复制
$ make VAR1=hello
Makefile:7: *** VAR1 is not defined. Stop.

你知道为什么这个不起作用吗?我能做些什么来让它工作呢?提前谢谢。

(请注意,我需要检查在运行makefile时是否实际定义了这些变量,因为我需要进一步向下包含另一个makefle,并且在执行此操作之前需要正确设置变量)。

EN

回答 1

Stack Overflow用户

发布于 2019-03-19 03:56:21

代码语言:javascript
复制
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: ; @:

输出:

代码语言:javascript
复制
$ make -f foo.mk
FOO not defined
FOO is defined: 'foo'
NOT DEFINED: $BAR
foo.mk:25: *** Required variables not defined.  Stop.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20389064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档