Makefile - Recompilation
le makeLe programme est un utilitaire intelligent et fonctionne en fonction des modifications que vous effectuez dans vos fichiers source. Si vous avez quatre fichiers main.cpp, hello.cpp, factorial.cpp et functions.h, alors tous les fichiers restants dépendent de functions.h et main.cpp dépend à la fois de hello.cpp et factorial.cpp. Par conséquent, si vous apportez des modifications à functions.h, alors lemakerecompile tous les fichiers source pour générer de nouveaux fichiers objets. Cependant, si vous apportez des modifications à main.cpp, car cela ne dépend d'aucun autre fichier, seul le fichier main.cpp est recompilé, et help.cpp et factorial.cpp ne le sont pas.
Lors de la compilation d'un fichier, le makevérifie son fichier objet et compare les horodatages. Si le fichier source a un horodatage plus récent que le fichier objet, il génère un nouveau fichier objet en supposant que le fichier source a été modifié.
Éviter la recompilation
Il peut y avoir un projet composé de milliers de fichiers. Parfois, vous avez peut-être modifié un fichier source, mais vous ne souhaiterez peut-être pas recompiler tous les fichiers qui en dépendent. Par exemple, supposons que vous ajoutiez une macro ou une déclaration à un fichier d'en-tête, dont dépendent les autres fichiers. Être conservateur,make suppose que tout changement dans le fichier d'en-tête nécessite la recompilation de tous les fichiers dépendants, mais vous savez qu'ils n'ont pas besoin de recompilation et vous préférez ne pas perdre votre temps à attendre qu'ils soient compilés.
Si vous anticipez le problème avant de modifier le fichier d'en-tête, vous pouvez utiliser l'indicateur `-t '. Ce drapeau ditmakenon pas pour exécuter les commandes dans les règles, mais plutôt pour marquer la cible à jour en changeant sa date de dernière modification. Vous devez suivre cette procédure -
Utilisez la commande `make 'pour recompiler les fichiers source qui ont vraiment besoin d'une recompilation.
Apportez les modifications aux fichiers d'en-tête.
Utilisez la commande «make -t» pour marquer tous les fichiers objets comme à jour. La prochaine fois que vous exécutez make, les modifications apportées aux fichiers d'en-tête n'entraînent aucune recompilation.
Si vous avez déjà modifié le fichier d'en-tête à un moment où certains fichiers nécessitent une recompilation, il est trop tard pour le faire. A la place, vous pouvez utiliser l'indicateur `-o file ', qui marque un fichier spécifié comme" ancien ". Cela signifie que le fichier lui-même ne sera pas refait, et rien d'autre ne sera refait sur son compte. vous devez suivre cette procédure -
Recompilez les fichiers source qui ont besoin de compilation pour des raisons indépendantes du fichier d'en-tête particulier, avec `make -o header file '. Si plusieurs fichiers d'en-tête sont impliqués, utilisez une option `-o 'distincte pour chaque fichier d'en-tête.
Mettez à jour tous les fichiers objets avec `make -t '.