gpt4 book ai didi

c - 调用 make 时缺少分隔符

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:31 27 4
gpt4 key购买 nike

我正在编写一个简单的 makefile 来编译我的程序,源代码在 src 文件夹中, header 在 inc 文件夹中,但是我收到了错误

src/test1.c:3: *** missing separator,Stop

我在这里阅读了一些关于该错误的帖子,每个人都说这是因为在命令前放置了空格而不是制表符。 我 100% 确定我正在使用标签,但错误仍然存​​在...这是 makefile

SOURCE = $(wildcard src/*.c)
OBJECTS = $(SOURCE:.o=.c)
DEBS = $(SOURCE:.d=.c)

-include $(DEBS)

all:$(OBJECTS)
gcc -o asd.exe $(OBJECTS)

%.o:%.c
gcc -c $<

%.d:%.c
gcc -o $@ -MM $<

.PHONY:clean

clean:
rm -f *.c

最佳答案

制表符与空格(在这种情况下)是一个转移注意力的问题。您的错误消息显示了问题:

src/test1.c:3: *** missing separator,Stop.

嗯...make 提示文件 src/test1.c 的第 3 行...为什么 make 正在解析您的 C 代码!?!?

原因如下:您的替换倒退了:

OBJECTS = $(SOURCE:.o=.c)
DEBS = $(SOURCE:.d=.c)

第一行将所有xxx.o 路径替换为xxx.c。这与您想要的完全相反:您想要将所有 xxx.c 路径替换为 xxx.o.d 文件也是如此。

由于没有发生替换,未修改的文件被保留下来,所以 DEBS 变量的值为 src/test1.c 等,然后您尝试 包括作为生成文件。

修改你的作业:

OBJECTS = $(SOURCE:.c=.o)
DEBS = $(SOURCE:.c=.d)

提示:

这里使用简单的赋值会更有效率:

SOURCE := $(wildcard src/*.c)
OBJECTS := $(SOURCE:.c=.o)
DEBS := $(SOURCE:.c=.d)

关于c - 调用 make 时缺少分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53459318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com