recherche

Qu'est-ce que le makefile sous Linux

Nov 26, 2021 pm 02:02 PM
linuxmakefile

Sous Linux, makefile est la règle de compilation d'un fichier de projet, qui décrit les règles de compilation et de liaison de l'ensemble du projet ; elle inclut quels fichiers doivent être compilés, quels fichiers n'ont pas besoin d'être compilés, quels fichiers doivent être compilés. compilé en premier et quels fichiers doivent être compilés plus tard Compilation, quels fichiers doivent être reconstruits, etc.

Qu'est-ce que le makefile sous Linux

L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.

1. Qu'est-ce que Makefile

Makefile peut être simplement considéré comme les règles de compilation d'un fichier de projet, décrivant les règles de compilation et de liaison de l'ensemble du projet.

Un projet au niveau de l'entreprise comporte généralement de nombreux fichiers sources, qui sont parfois divisés en différents répertoires selon les fonctions, les types et les modules. Parfois, les codes sources de plusieurs programmes sont stockés dans un seul répertoire.

Makefle est né pour résoudre le problème de la compilation de certains des codes ci-dessus. Il définit un ensemble de règles qui déterminent quels fichiers doivent être compilés en premier, quels fichiers doivent être compilés plus tard et quels fichiers doivent être recompilés.

Tout ce qui est impliqué dans la compilation de l'ensemble du projet peut être décrit dans le Makefile. En d’autres termes, Makefile peut automatiser la compilation de nos projets sans avoir à saisir manuellement un tas de fichiers sources et de paramètres à chaque fois. L'avantage de

Makefile est qu'il peut réaliser une "compilation autonome". L'ensemble du projet n'a généralement besoin que d'une seule commande make pour terminer la compilation, la liaison et des fonctions encore plus complexes. On peut dire que tout programme source Linux est livré avec un Makefile.

2. Avantages de Makefile

  • Gérez la compilation du code, décidez quels fichiers compiler, l'ordre de compilation et si une recompilation est nécessaire ;

  • Gagnez du temps de compilation ; Si le fichier change, recompilez simplement ce fichier sans recompiler l'intégralité du projet

  • Une fois pour toutes ; Les Makefiles ne doivent généralement être écrits qu’une seule fois et n’ont pas besoin d’être trop modifiés par la suite.

3. Règles de dénomination

De manière générale, il est acceptable de nommer le Makefile comme Makefile ou makefile, ​​​​mais les noms de nombreux fichiers sources sont en minuscules, donc davantage de programmeurs utilisent le nom du Makefile, car cela affichera d'abord le Makefile.

Si vous nommez le Makefile avec un autre nom, tel que Makefile_demo, cela est également autorisé, mais la méthode suivante doit être utilisée lors de son utilisation :

make -f Makefile_demo

Règles de base

Les règles de base de Makefile. sont :

Cible :Dépendance

                                           (onglet) Règles

Cible--> Dépendances--> Certains fichiers nécessaires pour générer la cible

Règles-- > Générer des cibles à partir des fichiers de dépendance Fichier signifie

tab -->

Chaque règle doit commencer par tab , les espaces ne sont pas autorisésPar exemple, nous écrivons souvent gcc test.c -o test, en utilisant Makefile, cela peut s'écrire comme :

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

Parmi eux, Test dans la première ligne est la cible à générer, test.c est la dépendance et la deuxième ligne est la règle pour générer un test à partir de test.c.

Parfois, il y a plusieurs objectifs dans le Makefile, mais le Makefile

définira le premier objectif comme objectif ultime

. 5. Principe de fonctionnement

Génération de la cible :

a Vérifiez si le fichier de dépendances dans la règle existe

b Si le fichier de dépendances n'existe pas, recherchez s'il existe une règle pour générer la règle. fichier de dépendance.

Quest-ce que le makefile sous LinuxPar exemple, dans l'image ci-dessus, la règle pour générer la calculatrice est gcc main.o add.o sub.o mul.o p.o -o Makefil vérifiera d'abord main.o, add.o, sub. o, mul. Est-ce que o, p.o existe ? Sinon, il recherchera des règles pour générer le fichier de dépendances.

Par exemple, si la dépendance de main.o est manquante, le Makefile regardera ci-dessous pour voir s'il existe des règles pour générer main.o. Lorsqu'il constate que la règle gcc main.c -o main.o peut générer main.o, il utilise cette règle pour générer main.o, puis génère le calculateur d'objectif ultime.

L'ensemble du processus consiste à trouver des dépendances vers le bas, puis à exécuter des commandes vers le haut pour générer l'objectif ultime.

Mise à jour de la cible :

a. Vérifiez toutes les dépendances de la cible, régénérez la cible

b Si le fichier cible est postérieur au fichier dépendant, il doit l'être. mis à jour.

Quest-ce que le makefile sous LinuxPar exemple, si main.c est modifié, la cible main.o sera recompilée. Lorsque main.o sera mis à jour, le calculateur de cible ultime sera également recompilé. La mise à jour des autres fichiers se fait également par analogie.

6. Exécution de la commande

make:

Utilisez cette commande pour générer des fichiers cibles selon des règles prédéterminées.

Si le nom du Makefile n'est pas Makefile ou makefile, vous devez ajouter l'option

-f

, telle que : make -f Makefile_demo

make clean:

Effacez les fichiers intermédiaires (fichiers .o) et les fichiers cibles finaux générés lors du processus de compilation.

Si un fichier nommé clean existe dans le répertoire courant, cette commande ne sera pas exécutée.

​ -->Solution : Déclaration pseudo-cible : .PHONY:clean

Symboles spéciaux :

- : Indique que même si une erreur survient lors de l'exécution de cette commande, les commandes suivantes continueront d'être exécutées . Par exemple :

-rm a.o build/

@ : indique que la commande sera uniquement exécutée sans écho. Lorsqu'une règle générale est exécutée, la règle d'exécution sera imprimée sur le terminal. Après avoir ajouté ce symbole, seule la commande sera exécutée et la règle exécutée ne sera pas répercutée. Par exemple :

@echo $(SOURCE)

7. Variables ordinaires

Définition et affectation des variables :

Les variables peuvent être définies directement en attribuant des valeurs, telles que :

INCLUDE = ./include/

Valeur de la variable :

Entourez-la de parenthèses et ajoutez un signe dollar, tel que :

FOO = $(OBJ)

Variables intégrées au système :

Habituellement, toutes les lettres majuscules, telles que CC, PWD, CFLAG, etc.

Certains ont des valeurs par défaut, d'autres non. Par exemple, les plus courantes :

CPPFLAGS : options requises par le préprocesseur telles que : -I

CFLAGS : paramètres utilisés lors de la compilation –Wall –g -c

LDFLAGS : options utilisées par la bibliothèque de liens –L -l

La valeur par défaut des variables peut être modifiée. Par exemple, la valeur par défaut de CC est cc, mais elle peut être modifiée en gcc : CC=gcc

8 Variables automatiques

Variables automatiques couramment utilisées :

.

Makefile fournit de nombreuses variables automatiques, mais les trois suivantes sont couramment utilisées. Ces variables automatiques ne peuvent être utilisées que dans les commandes des règles et ne peuvent être utilisées ailleurs.

$@ --> La cible dans la règle

$ La première condition de dépendance dans la règle

$^ --> app : main.c func1.c fun2.c

 gcc $^ - o $@

Parmi eux : $^ représente main.c func1.c fun2.c, $

Règles de modèle :

Les règles de modèle utilisent % dans les conditions de cible et de dépendance pour correspondre aux fichiers correspondants. Par exemple, il y a trois fichiers main.c, func1.c et func2.c dans le répertoire. trois fichiers, La compilation du fichier peut être complétée par une règle : %.o:%.c

$(CC) –c $

Cette règle de modèle signifie :

main. o est généré par main.c,

  func1.o est généré par func1.c,

  func2.o est généré par func2.c

C'est le rôle des règles de modèle, qui peuvent faire correspondre tous les fichiers du répertoire à une fois.

9. Fonctions

makefile nous fournit également un grand nombre de fonctions. Les deux fonctions suivantes sont également couramment utilisées. Il convient de noter que toutes les fonctions du

makefile doivent avoir une valeur de retour

. Dans l'exemple suivant, supposons qu'il y ait trois fichiers main.c, func1.c et func2.c dans le répertoire.

wildcard :

est utilisé pour rechercher des fichiers d'un type spécifié dans un répertoire spécifié. Les paramètres suivants sont le répertoire + le type de fichier, par exemple : src = $(wildcard ./src/*.c)

.

Moyens : Recherchez tous les fichiers avec le suffixe .c dans le répertoire ./src et affectez-les à la variable src.

Une fois l'exécution de la commande terminée, la valeur de src est : main.c func1.c fun2.c.

patsubst:

Le remplacement correspondant, comme dans l'exemple suivant, est utilisé pour rechercher tous les fichiers se terminant par .c dans le répertoire src, les remplacer par des fichiers .o et les affecter à obj. obj = $(patsubst %.c ,%.o ,$(src))

Remplacez tous les fichiers par le suffixe .c dans la variable src par .o.

Une fois la commande exécutée, la valeur de obj est main.o func1.o func2.o

Spécialement, si vous souhaitez placer tous les fichiers .o dans le répertoire obj, vous pouvez utiliser la méthode suivante :

ob = $(patsubst . /src/%.c, ./obj/%.o, $(src))

Recommandations associées : "

Tutoriel vidéo Linux

"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Opérations Linux: Administration et maintenance du systèmeOpérations Linux: Administration et maintenance du systèmeApr 15, 2025 am 12:10 AM

Les étapes clés de la gestion et de la maintenance du système Linux incluent: 1) maîtriser les connaissances de base, telles que la structure du système de fichiers et la gestion des utilisateurs; 2) Effectuer la surveillance du système et la gestion des ressources, utilisez le haut, le HTOP et d'autres outils; 3) Utilisez des journaux système pour dépanner, utiliser JournalCTL et d'autres outils; 4) Rédiger des scripts automatisés et la planification des tâches, utilisez des outils CRON; 5) Implémentez la gestion et la protection de la sécurité, configurez les pare-feu via iptables; 6) Effectuer l'optimisation des performances et les meilleures pratiques, ajuster les paramètres du noyau et développer de bonnes habitudes.

Comprendre le mode de maintenance de Linux: l'essentielComprendre le mode de maintenance de Linux: l'essentielApr 14, 2025 am 12:04 AM

Le mode de maintenance Linux est entré en ajoutant init = / bin / bash ou paramètres uniques au démarrage. 1. Entrez le mode de maintenance: modifiez le menu Grub et ajoutez des paramètres de démarrage. 2. Remontez le système de fichiers en mode de lecture et d'écriture: Mount-Oremount, RW /. 3. Réparer le système de fichiers: utilisez la commande fsck, telle que FSCK / DEV / SDA1. 4. Sauvegardez les données et opérez avec prudence pour éviter la perte de données.

Comment Debian améliore la vitesse de traitement des données HadoopComment Debian améliore la vitesse de traitement des données HadoopApr 13, 2025 am 11:54 AM

Cet article examine comment améliorer l'efficacité du traitement des données Hadoop sur les systèmes Debian. Les stratégies d'optimisation couvrent les mises à niveau matérielle, les ajustements des paramètres du système d'exploitation, les modifications de configuration de Hadoop et l'utilisation d'algorithmes et d'outils efficaces. 1. Le renforcement des ressources matérielles garantit que tous les nœuds ont des configurations matérielles cohérentes, en particulier en faisant attention aux performances du CPU, de la mémoire et de l'équipement réseau. Le choix des composants matériels de haute performance est essentiel pour améliorer la vitesse de traitement globale. 2. Réglage des paramètres JVM: Ajustez dans le fichier hadoop-env.sh

Comment apprendre Debian SyslogComment apprendre Debian SyslogApr 13, 2025 am 11:51 AM

Ce guide vous guidera pour apprendre à utiliser Syslog dans Debian Systems. Syslog est un service clé dans les systèmes Linux pour les messages du système de journalisation et du journal d'application. Il aide les administrateurs à surveiller et à analyser l'activité du système pour identifier et résoudre rapidement les problèmes. 1. Connaissance de base de Syslog Les fonctions principales de Syslog comprennent: la collecte et la gestion des messages journaux de manière centralisée; Prise en charge de plusieurs formats de sortie de journal et des emplacements cibles (tels que les fichiers ou les réseaux); Fournir des fonctions de visualisation et de filtrage des journaux en temps réel. 2. Installer et configurer syslog (en utilisant RSYSLOG) Le système Debian utilise RSYSLOG par défaut. Vous pouvez l'installer avec la commande suivante: SudoaptupDatesud

Comment choisir la version Hadoop dans DebianComment choisir la version Hadoop dans DebianApr 13, 2025 am 11:48 AM

Lors du choix d'une version Hadoop adaptée au système Debian, les facteurs clés suivants doivent être pris en compte: 1. Stabilité et support à long terme: pour les utilisateurs qui poursuivent la stabilité et la sécurité, il est recommandé de choisir une version stable Debian, comme Debian11 (Bullseye). Cette version a été entièrement testée et a un cycle de support allant jusqu'à cinq ans, ce qui peut assurer le fonctionnement stable du système. 2. Package Mise à jour: Si vous avez besoin d'utiliser les dernières fonctionnalités et fonctionnalités Hadoop, vous pouvez considérer la version instable de Debian (SID). Cependant, il convient de noter que les versions instables peuvent avoir des problèmes de compatibilité et des risques de stabilité. 3. Soutien et ressources communautaires: Debian a un énorme soutien communautaire, qui peut fournir une documentation riche et

TiGervnc Partager Fichier Méthode sur DebianTiGervnc Partager Fichier Méthode sur DebianApr 13, 2025 am 11:45 AM

Cet article décrit comment utiliser TiGervnc pour partager des fichiers sur Debian Systems. Vous devez d'abord installer le serveur Tigervnc, puis le configurer. 1. Installez le serveur Tigervnc et ouvrez le terminal. Mettez à jour la liste des packages logiciels: SudoaptupDate pour installer le serveur TiGervnc: SudoaptInstallTiGervnc-standalone-servertigervnc-Common 2. Configurez le serveur TiGervnc pour définir le serveur VNC: VNCPasswd Démarrer le serveur VNC: VNCServer: 1-localHostNo

Conseils de configuration du pare-feu Debian Mail ServerConseils de configuration du pare-feu Debian Mail ServerApr 13, 2025 am 11:42 AM

La configuration du pare-feu d'un serveur de courrier Debian est une étape importante pour assurer la sécurité du serveur. Voici plusieurs méthodes de configuration de pare-feu couramment utilisées, y compris l'utilisation d'iptables et de pare-feu. Utilisez les iptables pour configurer le pare-feu pour installer iptables (sinon déjà installé): Sudoapt-getUpDaSuDoapt-getinstalliptableView Règles actuelles iptables: Sudoiptable-L Configuration

Méthode d'installation du certificat de Debian Mail Server SSLMéthode d'installation du certificat de Debian Mail Server SSLApr 13, 2025 am 11:39 AM

Les étapes pour installer un certificat SSL sur le serveur de messagerie Debian sont les suivantes: 1. Installez d'abord la boîte à outils OpenSSL, assurez-vous que la boîte à outils OpenSSL est déjà installée sur votre système. Si ce n'est pas installé, vous pouvez utiliser la commande suivante pour installer: Sudoapt-getUpDaSuDoapt-getInstallOpenSSL2. Générer la clé privée et la demande de certificat Suivant, utilisez OpenSSL pour générer une clé privée RSA 2048 bits et une demande de certificat (RSE): OpenSS

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP

Dreamweaver Mac

Dreamweaver Mac

Outils de développement Web visuel

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel