mio Makefile è:rendere sempre ricostruire
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
Se faccio make
poi make
di nuovo, ricostruisce sempre 'test'. Perché fa questo?
Anche se lo faccio: make a.o
ricostruisce ... Im su linux se questo aiuta.
In Windows se cambio 'test' con 'test.exe' e '-o test' con '-o test.exe', funziona correttamente. Quindi immagino che per qualche motivo 'make' nella mia linux non riesco a controllare i datestamp dei miei file nella directory.
L'ho fissato! I file .c sono stati creati in Windows. Ho aperto tutti i file. C e .h in vi, e senza fare nulla, salvo le modifiche, e tutto ha funzionato. Penso che la cosa del datestamp sia stata risolta facendo questo.
Riesci a trovare un caso di test più semplice? (Come un numero inferiore di file, forse un programma di tipo Hello World, in modo che tu possa includere tutto nella domanda.) Hai cambiato il modo in cui la regola * test * funziona in una modifica recente, e sospetto ci siano altre differenze significative da cosa è stato pubblicato. –
Penso che il problema sia linux. Se in quel makefile cambio 'test' con 'text.exe' e nella sua regola '-o text.exe', funziona perfettamente. – fsdfa
Solo a parte, probabilmente non dovresti chiamare il 'test' dell'eseguibile. La maggior parte degli UNIX ha un vero programma di 'test'. – paxdiablo