My Makefile là:làm luôn xây dựng lại
OBJS = b.o c.o a.o
FLAGS = -Wall -Werror
CC = gcc
test: $(OBJS)
$(CC) $(FLAGS) $(OBJS) -o test
b.o: b.c b.h
$(CC) $(FLAGS) -c b.c
a.o: a.c b.h c.h
$(CC) $(FLAGS) -c a.c
c.o: c.c c.h
$(CC) $(FLAGS) -c c.c
clean:
rm a
rm *.o
all: test
Nếu tôi làm make
sau đó make
một lần nữa, nó luôn luôn tái thiết 'test'. tại sao nó làm vậy?
Thậm chí nếu tôi làm: make a.o
nó giúp rebuild ... Im trên linux nếu giúp.
Trong cửa sổ nếu tôi thay đổi 'test' của 'test.exe' và 'test -o' bằng '-o test.exe', nó hoạt động tốt. Vì vậy, tôi đoán rằng đối với một số lý do 'làm' trong linux của tôi không thể kiểm tra các datestamps của các tập tin của tôi trong thư mục.
tôi FIXED IT! .c được tạo trong Windows. Tôi mở tất cả .c và .h trong vi, và không làm gì cứu được những thay đổi, và tất cả đều hiệu quả. Tôi nghĩ rằng điều datestamp đã được cố định làm điều này.
Bạn có thể làm việc trong trường hợp thử nghiệm đơn giản hơn không? (Chẳng hạn như ít tệp hơn, có lẽ là chương trình kiểu hello-world, vì vậy bạn có thể bao gồm mọi thứ trong câu hỏi.) Bạn đã thay đổi cách quy tắc * test * hoạt động trong bản chỉnh sửa gần đây và tôi nghi ngờ có sự khác biệt đáng kể khác từ những gì đã được đăng. –
Tôi nghĩ rằng vấn đề của nó là linux. Nếu trong đó makefile tôi thay đổi 'thử nghiệm' bởi 'text.exe' và trong quy tắc của nó '-o text.exe', nó hoạt động tốt. – fsdfa
Cũng giống như một sang một bên, bạn có lẽ không nên gọi thực thi 'thử nghiệm' của bạn. Hầu hết các UNIX đều có chương trình 'thử nghiệm' thực sự. – paxdiablo