2009-09-15 6 views
1

Je pensais utiliser ccache avec le code compilé par gcc sur la base de l'équipe (le même cache de ccache sera utilisé par tous les développeurs sur la même machine).Utilisation de gcc avec ccache

Puisque nous parlons de produit commercial, "l'exactitude" de la compilation est une priorité absolue.

Voici venir questions:

  1. est la compilation en utilisant ccache est sûr/reproductible? Y a-t-il des situations d'exception que ccache suppose que le cache a été touché par erreur?

    Si je vérifie un code source et le compile, je m'attends à recevoir les mêmes produits (exactement les mêmes bibliothèques/binaires) chaque fois que je répète un nouveau processus de compilation. Ceci est doit être pour le produit commercial.

  2. Y a-t-il des produits open source/commerciaux utilisant ccache comme partie intégrante de leur système de construction ? Cela rendra plus facile de convaincre mes collègues d'utiliser ccache.

Merci

Répondre

6

Selon le manuel, ccache détermine si elle a compilé un objet avant sur les points suivants:

  • la sortie pré-processeur de l'exécution du compilateur avec -E
  • la les options de la ligne de commande
  • la taille réelle des compilateurs et l'heure de modification
  • toute sortie stderr généré par le compilateur

Si certains PHB est toujours inquiet au sujet de risque supposé que vous prenez à cause de ccache, ne l'utiliser que pour le développement construit et construire le produit final en utilisant le compilateur sans frontal. Ou vous pouvez effacer le cache avant de construire le produit final.

Mise à jour: Je ne sais pas sur les produits en utilisant ccache comme partie intégrante de leur système de construction, mais il est vraiment trivial d'intégrer dans tout environnement où vous pouvez définir le chemin du compilateur. C'est à dire. pour autoconf:

CC="ccache gcc" ./configure 

Et après avoir regardé le nom de l'auteur, je dirais que c'est une hypothèse assez sûr qu'il a été largement utilisé au sein de l'équipe Samba.

Mise à jour en réponse au commentaire de Ringding sur l'utilisation du stderr: Du point de vue ccache, un bit d'information intéressante est la version du compilateur C et la chaîne configuration. gcc sorties au fichier d'erreur standard:

$ gcc -v 2>err 
$ cat err 
Using built-in specs. 
Target: i486-linux-gnu 
Configured with: ../src/configure -v --with-pkgversion='Debian 4.3.4-2' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu 
Thread model: posix 
gcc version 4.3.4 (Debian 4.3.4-2) 

Je serais prêt à parier que ccache utilise ceci ou une sortie similaire.Mais, hé, vous pouvez toujours regarder son code source. :-)

+0

Il ne peut pas prendre une décision basée sur la sortie stderr du compilateur car il devrait d'abord appeler le compilateur. Mais les 3 autres sont corrects, IIRC. – Ringding

+0

Les gars, savez-vous la réponse au 2ème point de ma question? @hillu +1 pour "sécurité". Une bonne partie de votre réponse est que le développeur peut également effectuer une construction "sûre" si le cache est préalablement nettoyé – dimba

0

Personnellement, je ne connais que ccache qui est très simple à utiliser, et je le trouve extrêmement utile pour mes projets privés à grande échelle. Cependant, pour ce qui est de l'équipe, je n'ai pas encore d'expérience. Vous pouvez être intéressé aussi à AO (audited objects):

En général:

  • il fournit un mécanisme plus robuste, peut utiliser l'environnement distribué pour la mise en cache
  • vitesse ccache jusqu'à seulement le temps de compilation, alors que AO accélérer lien temps aussi.
  • ne se limite pas seulement à c/C++

Peu de temps après ma réponse affichée (il y a 1,5 ans ...), je réussi à convaincre notre construction et R & gestionnaires de D, d'intégrer ccache dans la construction automatique système, et ils me sont reconnaissants à ce sujet. L'entreprise emploie plus de 200 développeurs, donc cela fonctionne vraiment. Quant à la phase de liaison, c'est toujours un problème.