A partir de CMake 3.1, il est possible d'utiliser ccache avec le générateur Xcode et Ninja est pris en charge à partir de CMake 3.4. Ninja honorera RULE_LAUNCH_COMPILE
tout comme le générateur Unix Makefiles (donc la réponse de @ Babcool vous y conduit aussi pour Ninja), mais faire fonctionner le cache pour le générateur Xcode demande un peu plus de travail. L'article suivant explique la méthode en détail, en se concentrant sur une implémentation générale qui fonctionne pour les trois générateurs CMake et en ne faisant aucune hypothèse sur la configuration des liens symboliques ccache ou du compilateur sous-jacent utilisé (il laisse toujours CMake décider du compilateur):
https://crascit.com/2016/04/09/using-ccache-with-cmake/
L'essentiel général de l'article est le suivant. Le début de votre CMakeLists.txt
fichier doit être configuré comme ceci:
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()
Les deux fichiers de modèle de script launch-c.in
et launch-cxx.in
ressemblent à ceci (ils doivent être dans le même répertoire que le CMakeLists.txt
fichier):
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}" "$@"
Ce qui précède est utilisé RULE_LAUNCH_COMPILE
seul pour Unix Makefiles et Ninja, mais pour le générateur Xcode, il repose sur l'aide du CMAKE_XCODE_ATTRIBUTE_...
support des variables de CMake . Le réglage des CC
et CXX
attributs de contrôle définis par l' utilisateur Xcode la commande du compilateur et LD
et LDPLUSPLUS
pour la commande de liaison est pas, pour autant que je peux dire, une caractéristique documentée des projets Xcode, mais il ne semble travailler. Si quelqu'un peut confirmer qu'il est officiellement pris en charge par Apple, je mettrai à jour l'article lié et cette réponse en conséquence.