根据您提供的错误更新,请检查在那些${CC}
命令之前的行上有什么内容。许多make
程序在命令前需要一个真正的制表符,而将八个空格(例如)放入编辑器中将会破坏它们。这往往是“Missing separator”错误的原因。
您可以通过以下记录来看到这一点。在文件中,$(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
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
demo: demo.o lib.o
${CC} ${CFLAGS2} -o demo demo.o lib.o
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
第一种解决方案的问题在于,即使只有一个过期,它也会不必要地编译两个程序。第二种解决方案则更加智能。