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_COMPILE
proprio 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.txt
file 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.in
e hanno questo launch-cxx.in
aspetto (dovrebbero trovarsi nella stessa directory del CMakeLists.txt
file):
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_COMPILE
da 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 CC
e CXX
definito dall'utente Xcode attributi per controllare il comando del compilatore e LD
e LDPLUSPLUS
per 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.