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. :-)
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
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