Od CMake 3.1 można używać ccache z generatorem Xcode, a Ninja jest obsługiwany od CMake 3.4. Ninja będzie honorować RULE_LAUNCH_COMPILEtak samo, jak generator Unix Makefiles (więc odpowiedź @ Babcool prowadzi również do Ninja), ale uzyskanie pamięci podręcznej działającej dla generatora Xcode wymaga trochę więcej pracy. Poniższy artykuł wyjaśnia szczegółowo tę metodę, koncentrując się na ogólnej implementacji, która działa dla wszystkich trzech generatorów CMake i nie przyjmuje żadnych założeń dotyczących konfigurowania dowiązań symbolicznych ccache lub używanego kompilatora (nadal pozwala CMake zdecydować o kompilatorze):
https://crascit.com/2016/04/09/using-ccache-with-cmake/
Ogólna istota artykułu jest następująca. Początek CMakeLists.txtpliku powinien wyglądać tak:
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()
Dwa pliki szablonów skryptów launch-c.ini launch-cxx.inwyglądają następująco (powinny znajdować się w tym samym katalogu co CMakeLists.txtplik):
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}" "$@"
Powyższe używa RULE_LAUNCH_COMPILEtylko dla Unix Makefiles i Ninja, ale dla generatora Xcode opiera się na pomocy z obsługi CMAKE_XCODE_ATTRIBUTE_...zmiennych CMake . Ustawienie CCi CXXzdefiniowanych przez użytkownika Xcode atrybutów kontrolować polecenia kompilator LDi LDPLUSPLUSdla polecenia łącznikowej nie, o ile mogę powiedzieć, udokumentowany cechą projektów Xcode, ale wydaje się do pracy. Jeśli ktokolwiek może potwierdzić, że jest on oficjalnie obsługiwany przez Apple, zaktualizuję odpowiednio powiązany artykuł i tę odpowiedź.