鉴于您的更新错误,请检查您在那些 ${CC} 命令之前的行。许多make 程序需要一个real 制表符,然后输入八个空格的命令和编辑器(例如)会破坏它们。这通常是“缺少分隔符”错误的原因。
您可以通过以下成绩单看到这一点。在文件中,$(xyzzy)前有四个空格:
xyzzy=echo
all:
$(xyzzy) hello
所以,当我成功时,我得到了和你一样的错误:
pax> make
makefile:3: *** missing separator. Stop.
但是,当我编辑它并将这四个空格变成一个选项卡时,它工作正常:
pax> make
echo hello
hello
您尝试将源文件组合在一起的方式也有问题。
如果没有-c 标志gcc,它将尝试从这些命令中的每个 创建一个单独的可执行文件,几乎肯定会导致链接器错误。您将需要类似(简单)的东西:
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
第一个解决方案的问题在于,即使只有一个已过时,它也会不必要地编译两个程序。第二种解决方案更智能一些。