Ab CMake 3.1 ist es möglich, ccache mit dem Xcode-Generator zu verwenden, und Ninja wird ab CMake 3.4 unterstützt. Ninja wird RULE_LAUNCH_COMPILE
genau wie der Unix Makefiles-Generator ehren (also bringt Sie die Antwort von @ Babcool auch für Ninja dorthin), aber Ccache für den Xcode-Generator zum Laufen zu bringen, erfordert etwas mehr Arbeit. Der folgende Artikel erläutert die Methode im Detail, wobei der Schwerpunkt auf einer allgemeinen Implementierung liegt, die für alle drei CMake-Generatoren funktioniert, und keine Annahmen zum Einrichten von Ccache-Symlinks oder des verwendeten zugrunde liegenden Compilers getroffen werden (CMake kann weiterhin den Compiler bestimmen):
https://crascit.com/2016/04/09/using-ccache-with-cmake/
Der allgemeine Kern des Artikels lautet wie folgt. Der Anfang Ihrer CMakeLists.txt
Datei sollte ungefähr so eingerichtet sein:
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()
Die beiden Skriptvorlage Dateien launch-c.in
und launch-cxx.in
sieht wie folgt aus (sie im selben Verzeichnis wie das sein sollte CMakeLists.txt
Datei):
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}" "$@"
Das Obige wird RULE_LAUNCH_COMPILE
allein für Unix Makefiles und Ninja verwendet, aber für den Xcode-Generator ist es auf die Hilfe der CMake- CMAKE_XCODE_ATTRIBUTE_...
Variablenunterstützung angewiesen . Die Einstellung der CC
und CXX
benutzerdefinierten Xcode Attribute den Compiler - Befehl und steuern LD
und LDPLUSPLUS
für den Linker - Befehl nicht, soweit ich das beurteilen kann, ein dokumentiertes Merkmal von Xcode - Projekten, aber es zu funktionieren scheint. Wenn jemand bestätigen kann, dass es offiziell von Apple unterstützt wird, werde ich den verlinkten Artikel und diese Antwort entsprechend aktualisieren.