З CMake 3.1 можна використовувати кеш із генератором Xcode, а Ninja підтримується з CMake 3.4 і далі. Ninja буде вшановувати так RULE_LAUNCH_COMPILE
само, як генератор Unix Makefiles (тому відповідь @ Babcool приведе вас до Ninja), але отримання кешу, що працює для генератора Xcode, вимагає трохи більше роботи. Наступна стаття детально пояснює метод, зосереджуючись на загальній реалізації, яка працює для всіх трьох генераторів CMake, і не робить жодних припущень щодо налаштування символічних посилань кешу або використовуваного базового компілятора (це все одно дозволяє 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, я оновлю пов’язану статтю та цю відповідь відповідно.