Da CMake 3.1, è possibile utilizzare ccache con il generatore di Xcode e Ninja è supportato da CMake 3.4 in poi. Ninja onorerà RULE_LAUNCH_COMPILEproprio come il generatore di Makefiles Unix (quindi la risposta di @ Babcool ti porta lì anche per Ninja), ma far funzionare ccache per il generatore di Xcode richiede un po 'più di lavoro. Il seguente articolo spiega il metodo in dettaglio, concentrandosi su un'implementazione generale che funziona per tutti e tre i generatori CMake e non facendo ipotesi sulla configurazione di collegamenti simbolici ccache o sul compilatore sottostante utilizzato (consente comunque a CMake di decidere il compilatore):
https://crascit.com/2016/04/09/using-ccache-with-cmake/
L'essenza generale dell'articolo è la seguente. L'inizio del tuo CMakeLists.txtfile dovrebbe essere impostato in questo modo:
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()
I due file modello di script launch-c.ine hanno questo launch-cxx.inaspetto (dovrebbero trovarsi nella stessa directory del CMakeLists.txtfile):
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}" "$@"
Quanto sopra viene utilizzato RULE_LAUNCH_COMPILEda solo per Unix Makefiles e Ninja, ma per il generatore Xcode si basa sull'aiuto del CMAKE_XCODE_ATTRIBUTE_...supporto delle variabili di CMake . L'impostazione della CCe CXXdefinito dall'utente Xcode attributi per controllare il comando del compilatore e LDe LDPLUSPLUSper il comando del linker non è, per quanto ne so, una caratteristica documentata di progetti Xcode, ma non sembra funzionare. Se qualcuno può confermare che è ufficialmente supportato da Apple, aggiornerò l'articolo collegato e questa risposta di conseguenza.