Lỗi bạn gặp phải:
*** dấu phân cách bị thiếu (ý bạn là TAB thay vì 8 khoảng trắng?). Dừng lại.
Có nghĩa là makefile
không gian chứa thay vì Tab. Các make
tiện ích nổi tiếng là kén chọn về việc sử dụng Spacethay vì Tab. Vì vậy, có khả năng là phần makefile
chứa Spaceở phần đầu của khổ thơ quy tắc trong tệp.
Thí dụ
Giả sử tôi có 3 .c
tệp sau:
chào c
char *
hello()
{
return "Hello";
}
thế giới
char *
world()
{
return "world";
}
chính.c :
#include <stdio.h>
/* Prototypes. */
char *hello();
char *world();
int
main(int argc, char *argv[])
{
printf("%s, %s!\n", hello(), world());
return 0;
}
Nói rằng tôi có những điều sau đây Makefile
:
# The executable 'helloworld' depends on all 3 object files
helloworld: main.o hello.o world.o
cc -o helloworld main.o hello.o world.o # Line starts with TAB!
# Build main.o (only requires main.c to exist)
main.o: main.c
cc -c main.c # Line starts with TAB!
# Build hello.o (only requires hello.c to exist)
hello.o: hello.c
cc -c hello.c # Line starts with TAB!
# Build world.o (only requires world.c to exist)
world.o: world.c
cc -c world.c # Line starts with TAB!
# Remove object files, executables (UNIX/Windows), Emacs backup files,
#+ and core files
clean:
rm -rf *.o helloworld *~ *.core core # Line starts with TAB!
Bây giờ chúng tôi cố gắng xây dựng một mục tiêu
Khi tôi chạy nó chống lại mục tiêu helloworld
:
$ make helloworld
makefile:3: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
Nhìn có quen không?
Khắc phục sự cố
Bạn có thể khắc phục điều này bằng cách thay đổi các ký tự Spacesthực tế Tab. Tôi đã sử dụng vim
để sửa chữa tập tin của tôi. Đơn giản chỉ cần mở nó:
$ vim makefile
Và sau đó chạy lệnh này trong:
:%s/^[ ]\+/^I/
LƯU Ý: ^I
là một ký tự đặc biệt. Gõ ^theo sau Isẽ được hiểu khác so với Ctrl+ V- Ctrl+ I.
Điều này sẽ thay thế tất cả các dòng bắt đầu bằng 1 hoặc nhiều hơn Spacesvới một thực tế Tab.
Bây giờ khi tôi chạy lại helloworld
mục tiêu của mình :
$ make helloworld
cc -c main.c # Line starts with TAB!
cc -c hello.c # Line starts with TAB!
cc -c world.c # Line starts with TAB!
cc -o helloworld main.o hello.o world.o # Line starts with TAB!
Người giới thiệu