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_COMPILE
tak 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.txt
pliku 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.in
i launch-cxx.in
wyglądają następująco (powinny znajdować się w tym samym katalogu co CMakeLists.txt
plik):
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_COMPILE
tylko dla Unix Makefiles i Ninja, ale dla generatora Xcode opiera się na pomocy z obsługi CMAKE_XCODE_ATTRIBUTE_...
zmiennych CMake . Ustawienie CC
i CXX
zdefiniowanych przez użytkownika Xcode atrybutów kontrolować polecenia kompilator LD
i LDPLUSPLUS
dla 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ź.