因此,一些匿名开发人员决定使用一种荒谬的约定,即在包含其源文件的文件夹名称中使用空格。我会更改这些文件夹以不使用空格,但遗憾的是我没有在这里制定规则,因此这不是一个选项(尽管我希望是这样)。
LUAC = luac
SRC_DIR = .
SOURCE = \
stupid/naming\ convention/a.lua \
stupid/naming\ convention/very\ annoying/b.lua \
vpath .lua $(SRC_DIR)
OUT_DIR = ../out/
OUTPUT = $(patsubst %.lua, $(OUT_DIR)/%.luac, $(SOURCE))
all: $(OUTPUT)
$(OUT_DIR)/%.luac: %.lua
$(LUAC) "$<"
mv luac.out "$@"
.PHONY: all
Run Code Online (Sandbox Code Playgroud)
简单的生成文件。它要做的就是编译我拥有的所有 Lua 文件并将它们放入输出目录中。
无论我做什么,它一直想SOURCE在文件夹中的空格上拆分字符串,所以我以这样的美丽错误结束:
make: *** No rule to make target `stupid/naming ', needed by `all'. Stop.
Run Code Online (Sandbox Code Playgroud)
有没有办法在不重命名文件夹的情况下解决这个问题?
提前致谢。
非常简短但 IMO 最终正确的答案是 make(不仅仅是 GNU make,而是所有 POSIX 风格的 make 实现)不支持包含空格的路径名。如果您想使用 make,您的“匿名开发人员”根本无法使用它们。如果他们坚持认为这是绝对要求,您应该完全切换到不同的构建工具,这确实支持文件名中的空格。
是的,几乎不可能创建一个可以使用包含空格的文件名的 makefile,但是您基本上必须从头开始重写所有的 makefile,并且您将无法使用 GNU make 的许多功能,因此您的 makefile 将长、难读、难维护。
只是告诉他们克服自己。或者,如果他们真的不能,请尝试让他们在名称中没有任何空格的路径名中创建他们的工作区,然后创建一个包含指向真实工作区的空格的符号链接(相反的方法不适用于所有情况)。
不幸的是,GNU Make 处理空格分隔列表的函数不考虑空格的转义。唯一的例外是wildcard。
编辑:
这是我的解决方法:
LUAC = luac
SRC_DIR = .
SOURCE = \
stupid/naming\ convention/a.lua \
stupid/naming\ convention/very\ annoying/b.lua \
vpath .lua $(SRC_DIR)
OUT_DIR = ../out/
OUTPUT = $(patsubst %.lua,%.luac,$(SOURCE))
all: $(OUTPUT)
%.luac: %.lua
$(LUAC) "$<"
mv luac.out "$@""
.PHONY: all
Run Code Online (Sandbox Code Playgroud)
我尝试先这样输出它:
%.luac: %.lua
@echo "$<"
@echo "$@""
Run Code Online (Sandbox Code Playgroud)
输出如下:
stupid/naming convention/a.lua
../out/stupid/naming convention/a.luac
stupid/naming convention/very annoying/b.lua
../out/stupid/naming convention/very annoying/b.luac
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5253 次 |
| 最近记录: |