首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Makefile条件指令

Makefile条件指令
EN

Stack Overflow用户
提问于 2015-02-07 13:23:22
回答 1查看 122关注 0票数 1

下面是Make文件的片段: Makefile1:

代码语言:javascript
复制
bar = true
foo = bar
ifdef $(foo)
frobozz = yes
endif
all = ; @echo The value of frobozz is $(frobozz)

Makefile2:

代码语言:javascript
复制
bar =
foo = $(bar)
ifdef foo
frobozz = yes
else
frobozz = no
endif

all = ; @echo The value of frobozz is $(frobozz)

在这两种情况下,输出都是相同的"yes"

所以我的结论是:

  • 在第一种情况下,ifdef的参数是$(foo),最终变成bar,这意味着语句实际上看起来像ifdef ,因此bar的值被选中。
  • 在第二种情况下,ifdef的参数直接是foo,所以会检查foo的值,因此ifdef语句检查foo的值,即$(bar)。

首先,我想知道我是正确地解释了,还是我理解错了。

如果我得到的是正确的,那么在第二种情况下,bar的值是空的,所以它应该给出no,而不是给yes。请澄清..。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-07 14:07:56

  • Makefile1

首先,请注意,根据您的赋值,foo设置为bar不为true,但如果您想在foo中保存bar的值而是变量bar本身的名称,则它可能与预期的一样。

然后,请注意,在中,ifdef $( foo )指令实际上并不适用于变量foo本身,而是应用于在展开$(foo)之后生成的变量,因为该指令的语法是ifdef< variable_name >。在您的情况下,ifdef $(foo)将等同于ifdef。

  • Makefile2

ifdef不展开变量以查看该值是否为非空值,只测试变量是否有值。所以,

如果我得到的是正确的,那么在第二种情况下,bar的值是空的,所以它应该给不,而不是给出是。

是不对的值是空的,但它有一个值。

因此,使用ifdef的测试将返回除foo =以外的所有定义的true。若要测试空值,请使用ifeq ($(foo) )

来自这里

因此,对于ifdef,foo和bar之间有一个区别,我们可以从以下实验中看出这一点:

代码语言:javascript
复制
 bar=
 foo=$(bar)
 $(warning origin=$(origin foo), flavor=$(flavor foo), value="$(value foo)")
 $(warning origin=$(origin bar), flavor=$(flavor bar), value="$(value bar)")

 ifdef foo
 $(warning foo defined)
 else
 $(warning foo is not defined)
 endif

 ifdef $(bar)
 $(warning bar defined)
 else
 $(warning bar is not defined)
 endif

输出:

代码语言:javascript
复制
 Makefile:3: origin=file, flavor=recursive, value="$(bar)"
 Makefile:4: origin=file, flavor=recursive, value=""
 Makefile:7: foo defined
 Makefile:15: bar is not defined

但是,您可以强制进行扩展,只需进行很少的更改:在分配变量foo:foo:=$(bar),时添加冒号,这两者都没有定义:

代码语言:javascript
复制
 Makefile:3: origin=file, flavor=simple, value=""
 Makefile:4: origin=file, flavor=recursive, value=""
 Makefile:9: foo is not defined
 Makefile:15: bar is not defined
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28382619

复制
相关文章

相似问题

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