单独编译所有.c文件的makefile中的错误

问题描述 投票:0回答:1

我有一个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.

有人可以告诉我怎么了吗?谢谢您的时间。

c makefile
1个回答
0
投票

我将输入此作为答案:问题是由文件名中的冒号引起的,文件名是构成时间戳的部分。冒号的使用已根深蒂固地嵌入到制作方式中,以至于即使您以某种方式弄清楚,使用冒号也将是一场噩梦。

@@ 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变得一团糟,而必须维护此问题的继任者将永远恨您,并且可能会回到此处,并提出“如何解决此问题?” :-)

重命名文件以将冒号更改为(例如)下划线将使此问题消失。

祝你好运。>>

© www.soinside.com 2019 - 2024. All rights reserved.