linux - para - ¿Cómo usar ccache selectivamente?
mp3tag para linux (4)
Tengo que compilar varias versiones de una aplicación escrita en C ++ y creo que usar ccache para acelerar el proceso.
Los ejemplos de ccache tienen ejemplos que sugieren crear enlaces simbólicos llamados gcc, g ++ etc y asegurarse de que aparezcan en PATH antes de los binarios gcc originales, por lo que se usa ccache en su lugar.
Hasta ahora todo bien, pero me gustaría usar ccache solo al compilar esta aplicación en particular, no siempre.
Por supuesto, puedo escribir un script de shell que intentará crear estos enlaces simbólicos cada vez que quiera compilar la aplicación y los eliminaré cuando se compile la aplicación. Pero esto me parece un abuso del sistema de archivos.
¿Hay mejores maneras de usar ccache selectivamente, no siempre?
Para la compilación de un solo archivo de código fuente, simplemente podría llamar manualmente a ccache en lugar de a gcc y terminar, pero tengo que lidiar con una aplicación compleja que usa un sistema de compilación automatizado para múltiples archivos de código fuente.
¿Qué sistema operativo? Linux? La mayoría de las versiones empaquetadas de ccache ya ponen esos enlaces simbólicos en un directorio, por ejemplo, en mi máquina Fedora, viven en / usr / lib64 / ccache.
Así que podrías hacer
PATH=/usr/lib64/ccache:${PATH} make
Cuando quieras compilar con ccache.
La mayoría de los paquetes también instalan un archivo en /etc/profile.d/ que habilita automáticamente ccache, agregándolo al PATH como se indica arriba.
Si ese es el caso de su sistema, simplemente configure CCACHE_DISABLE=1
(consulte man ccache
para obtener más información) en su entorno para deshabilitar ccache: ccache aún se ejecutará, pero simplemente llamará al compilador real.
La alternativa a la creación de enlaces simbólicos es usar explícitamente ccache gcc
como compilador de C y ccache g++
como compilador de C ++. Por ejemplo, si su Makefile usa las variables CC
y CXX
para especificar los compiladores, puede compilar con make CC="ccache gcc" CXX="ccache g++"
o configurarlo a la hora de configurar ( ./configure CC="ccache gcc" CXX="ccache g++"
).
Me tropecé con esto por tantas veces ahora. Para mi la mejor solución fue hacer esto:
export CCACHE_RECACHE=1;
Desde las páginas de manual de ccache:
Corrupt object files
It should be noted that ccache is susceptible to general storage problems. If a bad object file sneaks into
the cache for some reason, it will of course stay bad. Some possible reasons for erroneous object files are
bad hardware (disk drive, disk controller, memory, etc), buggy drivers or file systems, a bad prefix_command
or compiler wrapper. If this happens, the easiest way of fixing it is this:
1. Build so that the bad object file ends up in the build tree.
2. Remove the bad object file from the build tree.
3. Rebuild with CCACHE_RECACHE set.
Para eludir ccache solo:
export CCACHE_DISABLE=1
Para más información:
man ccache
...
If you set the environment variable CCACHE_DISABLE then ccache will just call the real compiler, bypassing the cache completely.
...