Учитывая ваше обновление с ошибкой, проверьте, что у вас на линии, перед этими ${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
Проблема с первым решением состоит в том, что он излишне компилирует обе программы, даже если только одна устарела. Второе решение немного более разумно.