** Question éditée **Makefile compilation plusieurs fois les mêmes sources
Voici un modèle Makefile
typique:
TARGET = my_prog # project name
CC = gcc -o
CFLAGS = -Wall
SOURCES := $(wildcard *.c)
INCLUDES := $(wildcard *.h)
OBJECTS := $(SOURCES:.c=*.o)
rm = rm -f
$(TARGET): $(OBJECTS)
@$(CC) $(TARGET) $(CFLAGS) $(SOURCES)
@echo "Compilation complete!"
clean:
@$(rm) $(TARGET) $(OBJECTS)
@echo "Cleanup complete!"
Question: Pourquoi est- la ligne 11 (@S(CC) $(TARGET) ...
) faisant écho encore quand appeler make
?
Réponse: Parce que le problème est dans la règle par défaut et la ligne 11 est très bien.
** MISE A JOUR **
J'ai maintenant ce Makefile
# project name
TARGET = my_prog
CC = gcc -c
CFLAGS = -Wall -I.
LINKER = gcc -o
LFLAGS = -Wall
SOURCES := $(wildcard *.c)
INCLUDES := $(wildcard *.h)
OBJECTS := $(SOURCES:.c=*.o)
rm = rm -f
$(TARGET): $(OBJECTS)
$(LINKER) $(TARGET) $(LFLAGS) $(OBJECTS)
$(OBJECTS): $(SOURCES) $(INCLUDES)
$(CC) $(CFLAGS) $(SOURCES)
clean:
$(rm) $(TARGET) $(OBJECTS)
Question: Pourquoi$(CC) $(CFLAGS) $(SOURCES)
en cours d'exécution n fois, où n est le nombre de sources des dossiers ?
** MISE À JOUR 2 **
Serait-ce une bonne façon de résoudre ce (semble fonctionner ...)?
$(TARGET): obj
$(LINKER) $(TARGET) $(LFLAGS) $(OBJECTS)
obj: $(SOURCES) $(INCLUDES)
$(CC) $(CFLAGS) $(SOURCES)
Quelle version de Make? – Beta
@Beta, GNU. Je cours sous Linux –