A partir do CMake 3.1, é possível usar o ccache com o gerador Xcode e o Ninja é compatível com o CMake 3.4 em diante. Ninja vai honrarRULE_LAUNCH_COMPILE
assim como o gerador de Makefiles do Unix (então a resposta de @Babcool leva você lá para o Ninja também), mas fazer o ccache funcionar para o gerador de Xcode dá um pouco mais de trabalho. O artigo a seguir explica o método em detalhes, focando em uma implementação geral que funciona para todos os três geradores CMake e não fazendo suposições sobre a configuração de links simbólicos ccache ou o compilador subjacente usado (ainda permite que o CMake decida o compilador):
https://crascit.com/2016/04/09/using-ccache-with-cmake/
A essência geral do artigo é a seguinte. O início do seu CMakeLists.txt
arquivo deve ser configurado assim:
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()
Os arquivos de modelo de duas roteiro launch-c.in
e launch-cxx.in
olhar como este (que devem estar no mesmo diretório do CMakeLists.txt
arquivo):
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}" "$@"
O acima usa RULE_LAUNCH_COMPILE
sozinho para Makefiles Unix e Ninja, mas para o gerador de Xcode, ele depende da ajuda do CMAKE_XCODE_ATTRIBUTE_...
suporte de variáveis do CMake . A configuração do CC
e CXX
definido pelo usuário Xcode atributos para controlar o comando do compilador e LD
e LDPLUSPLUS
para o comando vinculador não é, tanto quanto eu posso dizer, uma característica documentada de projetos Xcode, mas parece ao trabalho. Se alguém puder confirmar que ele é oficialmente suportado pela Apple, atualizarei o artigo vinculado e esta resposta de acordo.