GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Linux make expliquée avec des exemples

La marque La commande sous Linux est l'une des commandes les plus fréquemment utilisées par les administrateurs système et les programmeurs. Bien qu'il aide les administrateurs à compiler et à installer de nombreux utilitaires open source via la ligne de commande, les programmeurs l'utilisent pour gérer la compilation de leurs projets volumineux et complexes. Dans cet article, nous aborderons le fonctionnement interne du make commande accompagnée de quelques exemples pratiques.

Comment faire La commande fonctionne

Pour ceux qui ne le savent pas, la commande make accepte les cibles comme arguments de ligne de commande. Ces cibles sont généralement spécifiées dans un fichier nommé 'Makefile', qui contient également l'action associée correspondant aux cibles. Pour plus d'informations, lisez notre série d'articles sur le fonctionnement des Makefiles.

Lorsque la commande make est exécutée pour la toute première fois, elle analyse le Makefile pour trouver la cible (qui lui est fournie) puis lit ses dépendances. Si ces dépendances sont elles-mêmes des cibles, il analyse le Makefile pour ces cibles et construit leurs dépendances (le cas échéant), puis les construit. Une fois les dépendances principales construites, il construit ensuite la cible principale (qui a été transmise à la commande make).

Maintenant, supposons que vous apportiez des modifications à un seul fichier source et que vous exécutiez à nouveau la commande make, cela ne compilera que les fichiers objets correspondant à ce fichier source, et vous fera donc gagner beaucoup de temps lors de la compilation de l'exécutable final.

faire des exemples de commandes

Voici les détails de l'environnement de test utilisé pour cet article :

  • SE – Ubuntu 13.04
  • Shell – Bash 4.2.45
  • Application – GNU Make 3.81

Voici le contenu du projet :

$ ls
anotherTest.c Makefile test.c test.h

et voici le contenu du Makefile :

all: test

test: test.o anotherTest.o
        gcc -Wall test.o anotherTest.o -o test

test.o: test.c
        gcc -c -Wall test.c

anotherTest.o: anotherTest.c
        gcc -c -Wall anotherTest.c

clean:
        rm -rf *.o test

Voyons maintenant quelques-uns des exemples d'utilisation de la commande make sous Linux.

1) Un exemple simple

Pour compiler le projet, vous pouvez soit simplement utiliser 'make' ou utiliser la cible 'all' avec la commande make.

$ make
gcc -c -Wall test.c
gcc -c -Wall anotherTest.c
gcc -Wall test.o anotherTest.o -o test

Vous pouvez donc voir que la commande make crée d'abord les dépendances, puis la cible réelle.

Si vous regardez le contenu du répertoire, il y aurait des fichiers .o et des fichiers exécutables dedans :

$ ls
anotherTest.c anotherTest.o Makefile test test.c test.h test.o

Maintenant, supposons que vous fassiez quelques changements dans test.c et que vous recompiliez le projet avec make :

$ make
gcc -c -Wall test.c
gcc -Wall test.o anotherTest.o -o test

Ainsi, vous pouvez voir que seul test.o est recompilé, tandis qu'un autreTest.o n'est pas recompilé.

Maintenant, pour nettoyer tous les fichiers objets avec l'exécutable 'test', vous pouvez utiliser la cible 'clean' :

$ make clean
rm -rf *.o test

$ ls
anotherTest.c Makefile test.c test.h

Vous pouvez donc voir que tous les fichiers .o et l'exécutable 'test' ont été supprimés.

2) Faites toujours toutes les cibles avec l'option -B

À présent, vous savez probablement que la commande make ne compile pas les fichiers qui n'ont pas changé depuis la dernière fois. Mais, si vous souhaitez remplacer le comportement par défaut du make, vous pouvez utiliser l'option -B.

Voici un exemple :

$ make
make: Nothing to be done for `all'.

$ make -B
gcc -c -Wall test.c
gcc -c -Wall anotherTest.c
gcc -Wall test.o anotherTest.o -o test

Ainsi, vous pouvez voir que si la commande 'make' n'a compilé aucun fichier, 'make -B' a compilé de force tous les objets avec l'exécutable final.

3) Afficher les informations de débogage à l'aide de l'option -d

Si vous voulez un compte rendu détaillé de ce que la commande make fait réellement lorsqu'elle est exécutée, utilisez l'option -d.

Voici un exemple :

$ make -d | more
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu
Reading makefiles...
Reading makefile `Makefile'...
Updating makefiles....
Considering target file `Makefile'.
Looking for an implicit rule for `Makefile'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.o'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.c'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.cc'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.C'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.cpp'.
Trying pattern rule with stem `Makefile'.
--More--

C'est une longue sortie. Vous pouvez voir que j'ai utilisé le more commande pour afficher la sortie page par page. Vous devez le voir par vous-même pour avoir une meilleure idée des détails que cette option est capable de produire.

4) Changer de répertoire en utilisant l'option -C

Vous pouvez fournir un chemin de répertoire différent à la commande make, vers lequel elle basculerait avant de rechercher un Makefile.

Voici un exemple. Supposons que vous soyez actuellement dans ce répertoire :

$ ls
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt

Mais vous voulez exécuter make avec le Makefile conservé dans ../make-dir/. Alors voici ce qu'il vous reste à faire :

$ make -C ../make-dir/
make: Entering directory `/home/himanshu/practice/make-dir'
make: Nothing to be done for `all'.
make: Leaving directory `/home/himanshu/practice/make-dir'

Vous pouvez donc voir que la commande make est passée au répertoire spécifié, y a été exécutée, puis est revenue.

5) Traiter tout autre fichier comme "Makefile" via l'option -f

Si vous voulez renommer votre Makefile en disons "my_makefile" ou tout autre nom, et que la commande make le traite comme le "Makefile" par défaut, vous pouvez utiliser l'option -f pour cela.

Voici un exemple :

make -f my_makefile

De cette façon, la commande make sélectionnera et analysera my_makefile au lieu de Makefile.


Linux
  1. Commande d'arrêt Linux expliquée avec des exemples

  2. Commande Linux nslookup expliquée avec des exemples

  3. Commande Linux Traceroute, expliquée avec des exemples

  4. Commande JQ sous Linux avec exemples

  5. La commande whoami sous Linux expliquée avec des exemples

La commande Bash Echo expliquée avec des exemples sous Linux

Commande Tr sous Linux expliquée avec des exemples

w Commande expliquée avec des exemples sous Linux

Explication de la commande Linux tee (avec exemples)

La commande Linux csplit expliquée (avec des exemples)

Linux make Commande avec des exemples