GNU/Linux >> Tutoriels Linux >  >> Linux

Peux-tu le faire? Compiler des programmes C sous Linux à l'aide de la commande Make

Lorsque vous installez un logiciel à partir de la source, vous exécutez généralement des commandes telles que "make", "make install", "make clean", etc. Vous êtes-vous demandé ce que font réellement toutes ces commandes make ? Bien sûr, nous savons qu'il essaie de compiler et d'installer le logiciel. Mais, pourquoi faire ? Qu'est-ce que ça fait vraiment ?

Pour compiler un seul programme C, la commande cc est très utile. Pour compiler plusieurs programmes C, l'utilitaire Make est très utile.

De plus, les programmeurs C et les administrateurs système trouveront utile d'automatiser les tâches liées à la compilation à l'aide de l'utilitaire make. Dans cet article, voyons comment utiliser la commande make.

1. Créer le Makefile pour une compilation simple

Supposons que vous disposiez de l'exemple de fichier de programme C appelé helloworld.c. En utilisant la commande cc, vous le compileriez généralement comme indiqué ci-dessous.

$ cc -o helloworld helloworld.c

Bien que vous n'ayez pas besoin d'utiliser make pour compiler un seul programme, l'exemple suivant vous donnera une idée de l'utilisation de make. Créez un makefile comme indiqué ci-dessous.

$ vim makefile
helloworld : helloworld.c
	cc -o helloworld helloworld.c

Exécutez make pour créer l'exécutable helloworld comme indiqué ci-dessous.

$ make helloworld

(or)

$ make

Étant donné que le makefile ne contient qu'une seule cible "helloworld", vous pouvez également appeler la commande make sans aucun argument, comme indiqué ci-dessus."make".

Veuillez vous assurer que le makefile et le code source sont présents dans le même répertoire, sinon spécifiez le chemin respectif des fichiers source dans le makefile.

Par défaut, la commande make s'attend à ce que le nom du fichier make soit soit Makefile ou makefile . Si le nom du fichier make est différent de l'un de ces deux, vous devez le spécifier à la commande make en utilisant l'option -f comme indiqué ci-dessous.

$ make -f sample.txt

Pour ceux qui découvrent C, lisez l'article du programme C Hello World.

2. Créer le Makefile pour compiler plus d'un fichier

Pour la compilation de fichiers multiples, utilisons trois fichiers — getname.c, getaccno.c et main.c.

Sur la base de ces trois fichiers *.c, créons un exécutable appelé "getinto".

En utilisant la commande cc, vous effectuerez généralement la compilation comme indiqué ci-dessous.

$ cc -o getinfo main.c getname.c getaccno.c header.h

Vous pouvez également compiler les fichiers *.c individuels comme indiqué ci-dessous et enfin créer l'exécutable "getinfo" comme indiqué ci-dessous.

$ cc -c getname.c
$ cc -c getaccno.c
$ cc -c main.c
$ cc -o getinfo main.o getname.o getaccno.o header.h

En utilisant notre utilitaire de création convivial, vous pouvez le faire efficacement comme indiqué ci-dessous.

$ vim makefile
getinfo:getname.o getaccno.o main.o header.h 
	cc -o getinfo getname.o getaccno.o main.o header.h 
main.o:main.c 
	cc -c main.c 
getaccno.o:getaccno.c 
	cc -c getaccno.c 
getname.o:getname.c 
	cc -c getname.c 

Enfin, exécutez la commande make comme indiqué ci-dessous.

$ make getinfo 

Remarque : Chaque fois que la commande make est invoquée, elle vérifie et compile uniquement les fichiers modifiés. C'est énorme pour les programmeurs C, où ils ont généralement plusieurs fichiers C et compilent l'ensemble du projet plusieurs fois pendant la phase de développement.

Vous pouvez également utiliser gdb pour déboguer des programmes C.

3. Ajouter une cible pour le processus de nettoyage

Dans le makefile (ou Makefile), vous pouvez également ajouter une cible pour nettoyer les fichiers objets, comme indiqué ci-dessous.

clean : 
	rm getname.o getaccno.o main.o

Vous pouvez maintenant nettoyer les fichiers objets du répertoire actuel comme indiqué ci-dessous.

$ make clean

Remarque : Au lieu de spécifier le fichier *.o individuel dans la commande rm, vous pouvez également donner rm *.o.

Vous pouvez également créer des fichiers d'archive C (*.a) à l'aide de la commande ar.

4. Gestion des variables dans Makefile

Dans le makefile (ou Makefile), vous pouvez utiliser des variables, qui peuvent être utilisées tout au long du makefile. Un exemple d'utilisation est présenté ci-dessous, où $obj contient tous les noms de fichiers d'objets.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h
main.o:main.c
	cc -c main.c
getaccno.o:getaccno.c
	cc -c getaccno.c
getname.o:getname.c
	cc -c getname.c

clean:
	rm getinfo $(obj)

5. Simplifier davantage le Makefile

L'utilitaire Make appelle implicitement la commande cc -c pour générer des fichiers .o pour le fichier .c correspondant. Nous n'avons vraiment pas besoin de spécifier le "cc -c" dans le makefile. Nous pouvons donc réécrire le makefile pour refléter cette règle implicite comme indiqué ci-dessous.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h
main.o:
getaccno.o:
getname.o:
clean:
	rm getinfo $(obj)

6. Insérer des messages de débogage dans le Makefile

Lorsque vous compilez un gros projet, vous souhaiterez peut-être afficher un message convivial. L'utilitaire Make peut imprimer des messages sur la sortie standard, ce qui peut vous aider à déboguer tout problème potentiel dans le processus de création. Utilisez l'instruction @echo dans votre makefile comme indiqué ci-dessous pour afficher des messages personnalisés.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h	
	@echo "make complete."
main.o:
getaccno.o:
getname.o:
clean:
	rm getinfo $(obj)
	@echo "getinfo, $(obj) files are removed."	

Voilà. Make n'est plus un mystère. Si vous avez aimé cet article, veuillez le mettre en signet dans délicieux ou le trébucher.


Linux
  1. Comment déboguer des programmes C sous Linux à l'aide de gdb

  2. Utilisation de la commande Linux Sleep dans les scripts Bash

  3. Comment redémarrer Linux en utilisant la ligne de commande

  4. Utilisation de la commande ripgrep (rg) sous Linux

  5. Comment tuer un processus sous Linux en utilisant la commande ?

Tutoriel sur l'utilisation de la commande Timeout sous Linux

Avez-vous besoin de Java ? Vous pouvez donc l'installer Java sur Linux

Planifier des travaux sous Linux avec la commande 'at'

Utilisation de la commande Watch sous Linux

Pouvez-vous faire mieux ? 15 exemples pratiques de commandes principales Linux

Utilisation de cut sur Linux Terminal