Desde CMake 3.1, es posible usar ccache con el generador Xcode y Ninja es compatible desde CMake 3.4 en adelante. Ninja honrará RULE_LAUNCH_COMPILE
al igual que el generador de Makefiles de Unix (por lo que la respuesta de @ Babcool lo lleva allí para Ninja también), pero hacer que ccache funcione para el generador de Xcode requiere un poco más de trabajo. El siguiente artículo explica el método en detalle, centrándose en una implementación general que funciona para los tres generadores de CMake y sin hacer suposiciones sobre la configuración de los enlaces simbólicos de ccache o el compilador subyacente utilizado (aún permite que CMake decida el compilador):
https://crascit.com/2016/04/09/using-ccache-with-cmake/
La esencia general del artículo es la siguiente. El inicio de su CMakeLists.txt
archivo debe configurarse de esta manera:
cmake_minimum_required(VERSION 2.8)
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
# Support Unix Makefiles and Ninja
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
endif()
project(SomeProject)
get_property(RULE_LAUNCH_COMPILE GLOBAL PROPERTY RULE_LAUNCH_COMPILE)
if(RULE_LAUNCH_COMPILE AND CMAKE_GENERATOR STREQUAL "Xcode")
# Set up wrapper scripts
configure_file(launch-c.in launch-c)
configure_file(launch-cxx.in launch-cxx)
execute_process(COMMAND chmod a+rx
"${CMAKE_BINARY_DIR}/launch-c"
"${CMAKE_BINARY_DIR}/launch-cxx")
# Set Xcode project attributes to route compilation through our scripts
set(CMAKE_XCODE_ATTRIBUTE_CC "${CMAKE_BINARY_DIR}/launch-c")
set(CMAKE_XCODE_ATTRIBUTE_CXX "${CMAKE_BINARY_DIR}/launch-cxx")
set(CMAKE_XCODE_ATTRIBUTE_LD "${CMAKE_BINARY_DIR}/launch-c")
set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS "${CMAKE_BINARY_DIR}/launch-cxx")
endif()
Los dos archivos de plantilla de secuencia de comandos launch-c.in
y se launch-cxx.in
ven así (deben estar en el mismo directorio que el CMakeLists.txt
archivo):
launch-c.in:
#!/bin/sh
export CCACHE_CPP2=true
exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_C_COMPILER}" "$@"
launch-cxx.in:
#!/bin/sh
export CCACHE_CPP2=true
exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_CXX_COMPILER}" "$@"
Lo anterior se usa RULE_LAUNCH_COMPILE
solo para Unix Makefiles y Ninja, pero para el generador Xcode se basa en la ayuda del CMAKE_XCODE_ATTRIBUTE_...
soporte de variables de CMake . El ajuste de la CC
y CXX
definida por el usuario Xcode atributos para controlar el comando compilador y LD
y LDPLUSPLUS
de comando de enlace no es, por lo que yo puedo decir, una característica documentada de proyectos de Xcode, pero parece que no funciona. Si alguien puede confirmar que Apple lo admite oficialmente, actualizaré el artículo vinculado y esta respuesta en consecuencia.