


Qu'est-ce que le makefile sous Linux
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.
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.
Par 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.
Par 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) 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 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, $ 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 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. 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 : " "7. Variables ordinaires
8 Variables automatiques
. Dans l'exemple suivant, supposons qu'il y ait trois fichiers main.c, func1.c et func2.c dans le répertoire.
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Étapes pour démarrer Nginx dans Linux: Vérifiez si Nginx est installé. Utilisez SystemCTL Start Nginx pour démarrer le service NGINX. Utilisez SystemCTL Activer Nginx pour activer le démarrage automatique de Nginx au démarrage du système. Utilisez SystemCTL Status Nginx pour vérifier que le démarrage est réussi. Visitez http: // localhost dans un navigateur Web pour afficher la page de bienvenue par défaut.

Comment confirmer si Nginx est démarré: 1. Utilisez la ligne de commande: SystemCTl Status Nginx (Linux / Unix), netStat -ano | Findstr 80 (Windows); 2. Vérifiez si le port 80 est ouvert; 3. Vérifiez le message de démarrage NGINX dans le journal système; 4. Utilisez des outils tiers, tels que Nagios, Zabbix et Icinga.

Réponse à la question: 304 Erreur non modifiée indique que le navigateur a mis en cache la dernière version de ressource de la demande du client. Solution: 1. Effacer le cache du navigateur; 2. Désactiver le cache du navigateur; 3. Configurer Nginx pour permettre le cache client; 4. Vérifier les autorisations du fichier; 5. Vérifier le hachage du fichier; 6. Désactiver le CDN ou le cache proxy inversé; 7. Redémarrez Nginx.

Dans Linux, utilisez la commande suivante pour vérifier si Nginx est démarré: SystemCTL Status Nginx Juges Basé sur la sortie de la commande: si "Active: Active (Running)" s'affiche, Nginx est démarré. Si "Active: Inactive (Dead)" est affiché, Nginx est arrêté.

Le serveur n'a pas l'autorisation d'accéder à la ressource demandée, ce qui donne une erreur NGINX 403. Les solutions incluent: vérifier les autorisations de fichiers. Vérifiez la configuration .htaccess. Vérifiez la configuration de Nginx. Configurez les autorisations Selinux. Vérifiez les règles du pare-feu. Dépanner d'autres causes telles que les problèmes de navigateur, les défaillances du serveur ou d'autres erreurs possibles.

Les principales différences entre Centos et Ubuntu sont: l'origine (Centos provient de Red Hat, pour les entreprises; Ubuntu provient de Debian, pour les particuliers), la gestion des packages (Centos utilise Yum, se concentrant sur la stabilité; Ubuntu utilise APT, pour une fréquence de mise à jour élevée), le cycle de support (CentOS fournit 10 ans de soutien, Ubuntu fournit un large soutien de LT tutoriels et documents), utilisations (Centos est biaisé vers les serveurs, Ubuntu convient aux serveurs et aux ordinateurs de bureau), d'autres différences incluent la simplicité de l'installation (Centos est mince)

Docker utilise les fonctionnalités du noyau Linux pour fournir un environnement de fonctionnement d'application efficace et isolé. Son principe de travail est le suivant: 1. Le miroir est utilisé comme modèle en lecture seule, qui contient tout ce dont vous avez besoin pour exécuter l'application; 2. Le Système de fichiers Union (UnionFS) empile plusieurs systèmes de fichiers, ne stockant que les différences, l'économie d'espace et l'accélération; 3. Le démon gère les miroirs et les conteneurs, et le client les utilise pour l'interaction; 4. Les espaces de noms et les CGROUP implémentent l'isolement des conteneurs et les limitations de ressources; 5. Modes de réseau multiples prennent en charge l'interconnexion du conteneur. Ce n'est qu'en comprenant ces concepts principaux que vous pouvez mieux utiliser Docker.

Centos sera fermé en 2024 parce que sa distribution en amont, Rhel 8, a été fermée. Cette fermeture affectera le système CentOS 8, l'empêchant de continuer à recevoir des mises à jour. Les utilisateurs doivent planifier la migration et les options recommandées incluent CentOS Stream, Almalinux et Rocky Linux pour garder le système en sécurité et stable.
