Начиная с CMake 3.1, можно использовать ccache с генератором Xcode, а Ninja поддерживается начиная с CMake 3.4. Ninja будет RULE_LAUNCH_COMPILE
уважать так же, как генератор Unix Makefiles (так что ответ @Babcool доставит вас туда и для Ninja), но для того, чтобы заставить ccache работать для генератора Xcode, требуется немного больше работы. В следующей статье подробно описывается метод, фокусируясь на общей реализации, которая работает для всех трех генераторов CMake, и не делая никаких предположений о настройке символических ссылок ccache или используемого базового компилятора (он по-прежнему позволяет CMake определять компилятор):
https://crascit.com/2016/04/09/using-ccache-with-cmake/
Общая суть статьи такова. Начало вашего CMakeLists.txt
файла должно быть настроено примерно так:
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()
Два файла шаблона сценария launch-c.in
и launch-cxx.in
выглядят следующим образом (они должны находиться в том же каталоге, что и 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}" "$@"
Вышеупомянутое используется RULE_LAUNCH_COMPILE
только для Unix Makefiles и Ninja, но для генератора Xcode он полагается на CMAKE_XCODE_ATTRIBUTE_...
поддержку переменных CMake . Установка из CC
и CXX
определяемого пользователя Xcode атрибутов для управления командой компилятора и LD
и LDPLUSPLUS
для команды линкера нет, насколько я могу сказать, документально особенность проектов Xcode, но это не похоже на работу. Если кто-нибудь может подтвердить, что он официально поддерживается Apple, я обновлю связанную статью и этот ответ соответственно.