Makefile说目标是空的,但它不应该是

时间:2016-04-15 15:54:29

标签: makefile

我正在尝试使用Makefile,它能够根据我是否给出某个目标来使用g++的不同实例。所以:如果我运行make home,我希望CC成为g++中的/usr/bin可执行文件,否则就会成为<longpath>/bin长路径中的ifeq ("$(TARGET)", "home") GCCPATH = /usr HSPARG = home endif $(info "$(TARGET)") $(info "$@") GCCPATH ?= <longpath> CC = $(GCCPATH)/bin/g++ GCCLIBPATH = $(GCCPATH)/lib64 。 所以我试着检查我的目标:

$ make home
""
""
<further build information>

然而,结果是:

GCCPATH

<longpath>在所有情况下都等于this.Configuration.LazyLoadingEnabled = false;

现在我的问题是:
1.我做错了什么? 2.如何解决?

1 个答案:

答案 0 :(得分:2)

首先,make home并未将TARGET设置为home。所以你必须执行make TARGET='home'来设置它。

其次,make关心空格,包括逗号后的空格。因此,当您撰写ifeq ("$(TARGET)", "home")时,make并没有像您预期的那样在逗号之后丢弃空格。那么make最终比较的是&#34; home&#34;和&#34;家&#34 ;.
您可以通过运行make TARGET=' home'并查看所获得的内容来查看此内容。删除该空格,您将解决问题。

那说你所有的引用都没有为make做任何事情。它通常不关心。行情几乎只是所有地方的字面字符(ifeq "arg1" "arg2"案例等除外,可能还有一两个其他地方,但我不能想到任何其他地方),所以你不要这样做由于您使用的是$(info)版本,因此在调用ifeq或甚至在ifeq (arg1,arg2)测试时需要它们。