我正在尝试使用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.如何解决?
答案 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)
测试时需要它们。