Je suis un débutant avec make
et je m'interroge sur quand utiliser make clean
.
Un collègue m'a dit que des constructions incrémentielles avec make
sont basées sur les horodatages de fichiers. Donc, si vous cédez une ancienne version d'un fichier dans votre VCS, elle aura un "ancien" horodatage et ce sera marqué comme "non nécessaire de recompiler ce fichier". Ensuite, ce fichier ne serait pas inclus dans la prochaine construction.
[.____] Selon ce même collègue, ce serait une raison d'utiliser make clean
.
Quoi qu'il en soit, j'ai eu à peu près la réponse à la question "quand utiliser make clean
"D'autres questions Stackexchange mais mon autre question est alors:
Pourquoi les constructions incrémentielles utilisant
make
s'appuient sur des fichiers horodatants et non sur SHA-1 par exemple? Git, par exemple, montre que nous pouvons déterminer avec succès si un fichier a été modifié à l'aide du SHA-1.
Est-ce pour les problèmes de vitesse?
Un problème évident (et sans doute superficiel) serait que le système de construction devrait conserver l'enregistrement des hatupes des fichiers utilisés pour la dernière version. Bien que ce problème puisse certainement être résolu, il nécessiterait un stockage latéral lorsque les informations temporelles sont déjà présentes dans le système de fichiers.
Plus sérieusement, cependant, le hasch ne transmettrait pas la même sémantique. Si vous connaissez ce fichier T a été construit de dépendance Ré avec hachage H1 et puis découvre que Ré maintenant hachas à H2, devriez-vous re-construire T? Probablement oui, mais cela pourrait aussi être que H2 Fait réellement référence à un plus vieux Version du fichier. Les timbres temporels définissent une commande lorsque les hachages ne sont que comparables pour l'égalité.
Une fonctionnalité que la prise en charge de time-timbres est que vous pouvez simplement mettre à jour le timbre temporel (par exemple, à l'aide de l'utilitaire de ligne de commande POSIX touch
) afin de tordre make
Pour penser qu'une dépendance a changé ou - plus intéressante - une cible est plus récente qu'elle ne l'est réellement. En jouant avec c'est une excellente occasion de vous tirer dessus dans le pied, il est utile de temps en temps. Dans un système basé sur HASH, vous auriez besoin de la prise en charge du système de construction lui-même pour mettre à jour sa base de données interne des hachages utilisés pour la dernière construction sans rien construire.
Bien qu'un argument puisse certainement être fait pour utiliser des hachages au fil des temps, mon point est que ce n'est pas une meilleure solution pour atteindre le même objectif, mais une solution différente pour atteindre un objectif différent. Lequel de ces objectifs est plus souhaitable pourrait être ouvert au débat.
Quelques points sur HASHES VS Timestamps dans les systèmes de construction:
Hachage, un projet entier est très lent. Vous devez lire chaque octet de chaque fichier. Git ne hasard pas tous les fichiers à chaque fois que vous exécutez un git status
Soit. Les checkouts de VCS ne définissent pas non plus de temps de modification d'un fichier à l'heure d'origine. Une restauration de sauvegarde serait que si vous prenez soin de le faire. Toute la raison Les systèmes de fichiers ont des horodatages sont destinés à des cas d'utilisation comme ceux-ci.
Un développeur fonctionne généralement make clean
Lorsqu'une dépendance n'est pas directement suivie par les modifications de maquillage. Ironiquement, cela inclut généralement le maquillage lui-même. Il comprend généralement également des versions du compilateur. En fonction de la manière dont votre maquillage est écrit, il pourrait inclure des versions de la bibliothèque externe.
Ce sont les sortes de choses qui ont tendance à être mises à jour lorsque vous faites une mise à jour de contrôle de la version, la plupart des développeurs ont donc l'habitude de gérer un make clean
Dans le même temps, vous savez que vous partez d'une ardoise propre. Vous pouvez vous échapper sans le faire beaucoup de temps, mais il est vraiment difficile de prédire les moments que vous ne pouvez pas.