我有一个Makefile,该文件应该将我的所有程序分别编译在一个文件夹中。生成文件的内容是:
SRCS = $(wildcard *.c)
PROGS = $(patsubst %.c,%,$(SRCS))
all: $(PROGS)
%: %.c
$(CC) $(CFLAGS) -o $@ $<
clean:
rm -f $(PROGS)
并且我的文件被命名为:
d744eb7b-350a-11e5-b84e-0242ac110011_2015-08-17_11:04:23.c
d746064f-350a-11e5-b84e-0242ac110011_2015-08-17_11:03:37.c
依此类推。
当我运行makefile时,它显示以下错误:
makefile:5: *** target pattern contains no '%'. Stop.
有人可以告诉我怎么了吗?谢谢您的时间。
我将输入此作为答案:问题是由文件名中的冒号引起的,文件名是构成时间戳的部分。冒号的使用已根深蒂固地嵌入到制作方式中,以至于即使您以某种方式弄清楚,使用冒号也将是一场噩梦。
@@ AProgrammer已经注意到页面Escaping colons in filenames in a Makefile实质上处理同一件事,明确的共识是:不要这样做。
甚至这个琐碎的makefile:
SRCS = 744eb7b-350a-11e5-b84e-0242ac110011_2015-08-17_11:04:23.c \
d746064f-350a-11e5-b84e-0242ac110011_2015-08-17_11:03:37.c
foo : $(SRCS)
echo $^
在我的Linux系统上失败,出现相同的“目标模式不包含%”错误。
是的,如果您直接输入\
,可以在冒号前面放置一个,这可能会起作用,但是当您开始将它们输入其他内容时,由于各种宏的原因,您最终会变成反斜杠地狱扩展。
可能有可能解决此问题,但这将使makefile变得一团糟,而必须维护此问题的继任者将永远恨您,并且可能会回到此处,并提出“如何解决此问题?” :-)
重命名文件以将冒号更改为(例如)下划线将使此问题消失。
祝你好运。>>