J’ai trois fichiers: program.c
, program.h
et headers.h
.
program.c
inclut program.h
et les en- headers.h
.
Je dois comstackr ceci sous Linux en utilisant le compilateur gcc . Je ne sais pas comment faire cela. Netbeans en a créé un pour moi, mais il est vide.
Intéressant, je ne savais pas que make utiliserait par défaut le compilateur C avec les règles concernant les fichiers sources.
Quoi qu’il en soit, une solution simple qui démontre des concepts simples de Makefile serait:
HEADERS = program.h headers.h default: program program.o: program.c $(HEADERS) gcc -c program.c -o program.o program: program.o gcc program.o -o program clean: -rm -f program.o -rm -f program
(N’oubliez pas que make nécessite un onglet au lieu d’une indentation d’espace, alors assurez-vous de le corriger lors de la copie)
Cependant, pour supporter plus de fichiers C, vous devrez créer de nouvelles règles pour chacun d’entre eux. Ainsi, pour améliorer:
HEADERS = program.h headers.h OBJECTS = program.o default: program %.o: %.c $(HEADERS) gcc -c $< -o $@ program: $(OBJECTS) gcc $(OBJECTS) -o $@ clean: -rm -f $(OBJECTS) -rm -f program
J'ai essayé de rendre cela aussi simple que possible en omettant des variables telles que $ (CC) et $ (CFLAGS) qui apparaissent généralement dans les fichiers makefile. Si cela vous intéresse, j'espère que je vous ai donné un bon départ.
Voici le Makefile que j'aime utiliser pour C source. Sentez-vous libre de l'utiliser:
TARGET = prog LIBS = -lm CC = gcc CFLAGS = -g -Wall .PHONY: default all clean default: $(TARGET) all: default OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) HEADERS = $(wildcard *.h) %.o: %.c $(HEADERS) $(CC) $(CFLAGS) -c $< -o $@ .PRECIOUS: $(TARGET) $(OBJECTS) $(TARGET): $(OBJECTS) $(CC) $(OBJECTS) -Wall $(LIBS) -o $@ clean: -rm -f *.o -rm -f $(TARGET)
Il utilise les fonctionnalités joker et patsubst de l'utilitaire make pour inclure automatiquement les fichiers .c et .h dans le répertoire en cours, ce qui signifie que lorsque vous ajoutez de nouveaux fichiers de code à votre répertoire, vous ne devrez pas mettre à jour le Makefile. Toutefois, si vous souhaitez modifier le nom de l'exécutable, des bibliothèques ou des indicateurs du compilateur générés, vous pouvez simplement modifier les variables.
Dans les deux cas, n'utilisez pas autoconf, s'il vous plaît. Je t'en supplie! 🙂
Par exemple, ce simple Makefile devrait être suffisant:
CC = gcc CFLAGS = -Wall tout: programme programme: programme.o program.o: programme.c programme.h en-têtes.h nettoyer: programme programme rm -f.o exécuter de programme ./programme
Notez qu’il doit y avoir
sur la ligne suivante après clean et run, pas les espaces.
MISE À JOUR Commentaires ci-dessous appliqués
all: program program.o: program.h headers.h
est assez. le rest est implicite
Le fichier make le plus simple peut être
all : test test : test.o gcc -o test test.o test.o : test.c gcc -c test.c clean : rm test *.o
Selon le nombre d’en-têtes et vos habitudes de développement, vous pouvez étudier gccmakedep. Ce programme examine votre répertoire actuel et ajoute à la fin du makefile les dépendances d’en-tête pour chaque fichier .c / cpp. C’est exagéré lorsque vous avez 2 en-têtes et un fichier de programme. Cependant, si vous avez 5+ petits programmes de test et que vous éditez l’un des 10 en-têtes, vous pouvez alors faire confiance à make pour reconstruire exactement les programmes qui ont été modifiés par vos modifications.
gcc program.c -o program
pas de makefile nécessaire.