gpt4 book ai didi

c - Makefile 中缺少分隔符?

转载 作者:太空狗 更新时间:2023-10-29 16:34:36 25 4
gpt4 key购买 nike

下面的 Makefile 不工作,我不确定发生了什么。

CC = gcc
CFLAGS = -Wall -g

demo:
${CC} ${CFLAGS} demo.c -o demo
lib:
${CC} ${CFLAGS} lib.c -o lib
clean:
rm -f lib demo

demo有main函数,lib有demo用到的一组方法。

我在 lib 中添加了 -c 标志。然而,当我运行 make 时,我得到:

Makefile:5: *** missing separator.  Stop.

最佳答案

鉴于您的更新有错误,请检查您在那些 ${CC} 命令之前的行中有什么。许多 make 程序在输入八个空格(例如)的命令和编辑器将中断它们之前需要一个真正的制表符。这通常是“缺少分隔符”错误的原因。

您可以通过以下文字记录看到这一点。在文件中,$(xyzzy) 前有四个空格:

xyzzy=echo
all:
$(xyzzy) hello

所以,当我成功时,我得到了和你一样的错误:

pax> make
makefile:3: *** missing separator. Stop.

但是,当我编辑它并将这四个空格变成一个制表符时,它工作正常:

pax> make
echo hello
hello

您尝试将源文件组合在一起的方式也有问题。

如果 gcc 没有 -c 标志,它将尝试从这些命令中的每个 创建一个单独的可执行文件,几乎肯定会导致链接器错误。您将需要类似(简单)的东西:

CC = gcc
CFLAGS = -Wall -g

# Just compile/link all files in one hit.
demo: demo.c lib.c
${CC} ${CFLAGS} -o demo demo.c lib.c

clean:
rm -f demo

或(稍微复杂一点):

CC = gcc
CFLAGS1 = -Wall -g -c
CFLAGS2 = -g

# Link the two object files together.

demo: demo.o lib.o
${CC} ${CFLAGS2} -o demo demo.o lib.o

# Compile each source file to an object.

demo.o: demo.c
${CC} ${CFLAGS1} -o demo.o demo.c

lib.o: lib.c
${CC} ${CFLAGS1} -o lib.o lib.c

clean:
rm -f demo

第一个解决方案的问题在于它不必要地编译两个程序,即使只有一个程序已过时。第二种解决方案更智能一些。

关于c - Makefile 中缺少分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9580566/

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