Mi Makefile es:siempre hacen reconstruir
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
Si hago make
make
entonces otra vez, siempre reconstruye 'prueba'. ¿Por qué hace esto?
Incluso si lo hago: make a.o
reconstruye ... Estoy en Linux si eso ayuda.
En windows si cambio 'test' por 'test.exe' y '-o test' por '-o test.exe', funciona bien. Así que supongo que por alguna razón 'make' en mi Linux no puedo verificar las fechas de mis archivos en el directorio.
I FIJO ¡! Los archivos .c se crearon en Windows. Abrí todos los .c y .h en vi, y sin hacer nada salvo los cambios, y todo funcionó. Creo que la cosa de la fecha se solucionó al hacer esto.
¿Se puede resolver un caso de prueba más simple? (Por ejemplo, menos archivos, tal vez un programa tipo hello world, para que pueda incluir todo en la pregunta). Ha cambiado la forma en que funciona la regla * test * en una edición reciente, y sospecho que hay otras diferencias significativas con respecto a lo que ha sido publicado –
Creo que el problema es Linux. Si en ese archivo MAKE cambio la 'prueba' por 'text.exe' y en su regla '-o text.exe', funciona bien. – fsdfa
Solo como un lado, probablemente no deberías llamar a tu "prueba" ejecutable. La mayoría de los UNIX tienen un verdadero programa de "prueba". – paxdiablo