【发布时间】:2013-02-06 21:30:26
【问题描述】:
在使用 make.exe 时,有没有办法让目标名称中的空格起作用?如果这个非常古老的错误报告是正确的,这似乎是不可能的: http://savannah.gnu.org/bugs/?712
作为参考,最大的问题是makefile命令如下:
"foo bar baz": $(OBJ)
$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)
... 似乎被视为三个单独的命令:一个用于构建“foo(注意包含的”),一个用于构建 bar,最后一个用于构建 baz”(再次,包括“)。这是因为 make.exe 似乎使用空格作为分隔符。
但是,假设一个人可能想要构建“Hello World.exe”是合理的。这似乎是不可能的。双引号不起作用,转义单独的单词也不起作用(我在某处读过,不记得链接了):
"foo\\ bar\\ baz": $(OBJ)
$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)
还有其他方法可以解决这个问题吗?官方手册只确认了tokenize-by-spaces的东西,但没有提供一种将空间用于任何其他目的的方法: http://www.gnu.org/software/make/manual/make.html#Rule-Syntax
编辑: 正如建议的那样,我也尝试过单斜杠,但这些与双斜杠的效果完全相同。抱怨它找不到第一个单词的规则:
mingw32-make.exe: *** No rule to make target `foo', needed by `all'. Stop.
虽然可以正确生成可执行文件“foo bar baz.exe”,但每次每个单词都会进行链接。
【问题讨论】:
标签: gcc makefile mingw target space