Estoy usando cmake para configurar mi proyecto y cuando cambio un archivo en un proyecto, descubrí que mi cmake sabe que solo recompila el archivo cambiado y luego vuelve a vincular todo para el ejecutable final / lib.

Luego leí la documentación sobre ccache, lo que no entiendo es: ¿cuál es la diferencia entre el enfoque de ccache (que usa el valor hash para verificar si el archivo ha cambiado y necesita recompilarse) y el enfoque predeterminado que usa cmake (o no podría ser algo más en lugar de cmake verifica las actualizaciones del archivo, pero ya sabes a qué me refiero aquí). Tal vez la parte PCH sea diferente, pero cmake 3.18 ahora viene con soporte PCH, entonces, ¿eso significa que los beneficios que ofrece ccache en la parte PCH ya no son únicos?

0
shelper 15 ago. 2020 a las 20:48

2 respuestas

La mejor respuesta

Considere el caso en el que cambia a una rama anterior de su proyecto, que sí compiló en el pasado y que ccache se ha almacenado en caché, pero CMake ve como "casi todos los archivos han cambiado y deben recompilarse", ahí es donde ve una ganancia masiva .

Otra situación es donde ha eliminado su directorio de compilación (por alguna buena razón) y ahora tiene que reconstruir todo. ccache también es una enorme ayuda allí.

También; ccache es trivial de configurar y de ahora en adelante es completamente invisible / transparente, por lo que realmente no hay razón para no usarlo. Cuando ayuda, generalmente ayuda mucho, cuando no ayuda, no duele.

3
Jesper Juhl 15 ago. 2020 a las 17:57

cmake / gmake y ccache no son exclusivos entre sí. Por lo general, se usan juntos.

ccache entra en juego cuando el árbol de fuentes de < debe reconstruirse por algún motivo. cmake / gmake solo reconstruye los archivos modificados, pero hay situaciones en las que es necesario volver a compilar todo el árbol de fuentes. Y si esto sucede repetidamente, ccache se activará y provocará un cortocircuito en el compilador. Los compiladores de C ++ son conocidos por ser lentos, y esto a menudo ayuda bastante.

Solo un par de ejemplos: cuando necesite cambiar repetidamente entre compilar con y sin optimizaciones, repetidamente. cmake / gmake no le ayudará cuando edite el archivo MAKE y ajuste las marcas de compilación. Ninguno de los archivos de origen cambió en realidad, por lo que cmake / gmake no cree que haya nada que hacer, por lo que debe make clean explícitamente y volver a compilar desde cero.

Si lo hace repetidamente, ccache evitará tener que ejecutar el compilador en todo el código fuente y simplemente obtendrá el módulo de objeto apropiado en lugar de compilar la fuente desde cero.

Otra situación común es cuando está ejecutando un script para preparar un paquete instalable para su código. Por lo general, esto implica el uso de una herramienta específica de implementación para reconstruir el código fuente, desde cero, en un paquete instalable.

3
Sam Varshavchik 15 ago. 2020 a las 17:59