有没有办法让目标名内部空间使用的make.exe当工作? 这似乎是不可能的,如果这真的是古代的bug报告是正确的: http://savannah.gnu.org/bugs/?712
作为参考,最大的问题是makefile文件的命令件,如:
"foo bar baz": $(OBJ)
$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)
......似乎得到视为三个独立的命令:一是打造“富(注意包括‘),一个建酒吧,最后,一个打造巴兹’(又包括”)。 这是因为的make.exe好像是用空格作为分隔符。
然而,这是合理的假设,人们可能会想建立“你好World.exe”为例。 这似乎并不可能。 双引号不工作,而且也不逃避单独的单词(我读过的地方,不记得的链接):
"foo\\ bar\\ baz": $(OBJ)
$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)
是否有任何其他的方式来解决这一问题? 官方手册只证实了记号化逐空间的东西,但不提供一种方法,利用空间用于其他任何目的: http://www.gnu.org/software/make/manual/make.html#Rule-句法
编辑:作为建议,我已经试过单斜杠太多,但这些都为双斜杠的确切同样的效果。 让会抱怨无法找到的第一个字的规则:
mingw32-make.exe: *** No rule to make target `foo', needed by `all'. Stop.
可执行“富酒吧baz.exe”是否正确,虽然生产,但联每字每一次完成。
取而代之的双反斜线的使用单一的。 下面的Makefile工作(至少对于GNU MAKE):
goal: foo\ bar
foo\ bar:
gcc -o "foo bar" "foo bar.c"
因为马蒂亚斯说,它是“\”的问题,而是双引号了。 这里是我succeded到这一点:
EXECUTABLE=foo\ bar\ baz
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(OBJECTS) -o "$@" $(LDFLAGS)
注意周围的$双引号@看来,我认为时许到达目标“$(可执行的)”,它扩展了“\”,因此命令行成为
gcc file.o -o foo bar baz -LFlags
这是不是你想要的,你要围绕着文件的名称双引号。
现在你是在Windows,我不记得它是如何在名称空间的交易,从而马蒂亚斯说,首先请与空间如何“cmd.exe的”交易(除非用双引号周围的名字......)
也许更容易考虑一个简单的Makefile,而忽略在标准的依赖性targetRule: dependencies
调用。 该OP是Windows,而下方在Linux上做bash
外壳; 但也许应该是适用的使用Windows的到bash
通过shell cygwin
,我猜。 我在下面Makefile
(注意,这里应该是前TAB echo
命令,SO转换为空格):
testA:
echo "testA"
unrelated:
echo "unrelated"
testA\ clean:
echo "testA clean"
clean:
echo "clean"
如果我打电话make
有目标的clean
或testA
中bash
shell终端,我得到预期的结果:
$ make testA
echo "testA"
testA
$ make clean
echo "clean"
clean
现在,如果我叫make testA clean
刚刚写入,在bash
shell将在分割空间的参数,所以make
将获得两个参数,并且将分开运行:
$ make testA clean
echo "testA"
testA
echo "clean"
clean
......但如果我换给目标make
的报价-或者,如果我逃避的空间- shell会明白,它应该是与内部空间中的一个参数,将传播它是这样来make
,这将继续执行什么写成testA\ clean
目标规则:
$ make "testA clean"
echo "testA clean"
testA clean
$ make testA\ clean
echo "testA clean"
testA clean
这样的后果之一是,不幸的是你不能“TAB”在为自动完成命令行testA\ clean
; 如果键入make te
TAB在命令行,仅testA
会自动自动完成(以及testA\ clean
将不被显示为自动完成选项)。