Với bản cập nhật của bạn với các lỗi, kiểm tra những gì bạn có trên dòng trước những ${CC}
lệnh. Nhiều chương trình make
yêu cầu một ký tự tab thực trước khi lệnh và trình chỉnh sửa đưa vào tám dấu cách (ví dụ) sẽ phá vỡ chúng. Đó là thường xuyên hơn không phải là nguyên nhân của các lỗi "Thiếu dấu phân tách".
Bạn có thể thấy điều đó với bảng điểm sau. Trong tập tin, có bốn không gian trước khi $(xyzzy)
:
xyzzy=echo
all:
$(xyzzy) hello
Vì vậy, khi tôi thực hiện nó, tôi nhận được lỗi tương tự như bạn:
pax> make
makefile:3: *** missing separator. Stop.
Nhưng, khi tôi chỉnh sửa nó và biến những bốn không gian vào một tab, nó hoạt động tốt:
pax> make
echo hello
hello
bạn cũng có một vấn đề với cách bạn đang cố gắng com bine các tập tin nguồn với nhau.
Nếu không có một lá cờ -c
-gcc
, nó sẽ cố gắng để tạo ra một thực thi riêng biệt từ mỗi của những lệnh, gần như chắc chắn dẫn đến mối liên kết lỗi. Bạn sẽ cần một cái gì đó tương tự (đơn giản):
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
hoặc (hơi phức tạp hơn):
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
Vấn đề với giải pháp đầu tiên là nó không cần thiết biên dịch cả hai chương trình ngay cả khi chỉ có một đã lỗi thời. Giải pháp thứ hai thông minh hơn một chút.
Bạn có ý nghĩa gì khi "không hoạt động"? Bạn đang gặp phải lỗi gì? Điều gì đang xảy ra? _not_ đang diễn ra là gì? – Mat
bạn có thể cho chúng tôi biết lỗi không? – MByD
Rất tiếc, đã thêm ngay bây giờ. – Kobi