Depuis CMake 3.1, il est possible d'utiliser ccache avec le générateur Xcode et Ninja est supporté à partir de CMake 3.4. Ninja respectera RULE_LAUNCH_COMPILE
tout comme le générateur Unix Makefiles (la réponse de @Babcool vous y conduit également pour Ninja), mais faire fonctionner ccache 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 sur le compilateur sous-jacent utilisé (il laisse toujours CMake décider du compilateur) :
https://crascit.com/2016/04/09/using-ccache-with-cmake/
L'essentiel de l'article est le suivant. Le début de votre CMakeLists.txt
doit être configuré de la manière suivante :
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èles script launch-c.in
y launch-cxx.in
ressemblent à ceci (ils doivent se trouver dans le même répertoire que le fichier CMakeLists.txt
) :
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}" "$@"
Les utilisations ci-dessus RULE_LAUNCH_COMPILE
pour les Makefiles Unix et Ninja, mais pour le générateur Xcode, il s'appuie sur l'aide de l'outil CMake CMAKE_XCODE_ATTRIBUTE_...
soutien aux variables. Le réglage des CC
y CXX
des attributs Xcode définis par l'utilisateur pour contrôler la commande du compilateur et les attributs Xcode définis par l'utilisateur. LD
y LDPLUSPLUS
pour la commande linker n'est pas, pour autant que je sache, une fonctionnalité documentée des projets Xcode, mais cela semble fonctionner. Si quelqu'un peut confirmer qu'elle est officiellement supportée par Apple, je mettrai à jour l'article lié et cette réponse en conséquence.