Dari CMake 3.1, dimungkinkan untuk menggunakan ccache dengan generator Xcode dan Ninja didukung dari CMake 3.4 dan seterusnya. Ninja akan menghormati RULE_LAUNCH_COMPILEseperti generator Unix Makefiles (jadi jawaban @ Babcool membawa Anda ke sana untuk Ninja juga), tetapi mendapatkan ccache yang berfungsi untuk generator Xcode membutuhkan sedikit lebih banyak pekerjaan. Artikel berikut menjelaskan metode ini secara mendetail, dengan fokus pada implementasi umum yang berfungsi untuk ketiga generator CMake dan tidak membuat asumsi tentang penyiapan ccache symlink atau kompilator yang digunakan (masih memungkinkan CMake memutuskan kompilernya):
https://crascit.com/2016/04/09/using-ccache-with-cmake/
Inti umum dari artikel tersebut adalah sebagai berikut. Awal CMakeLists.txtfile Anda harus diatur seperti ini:
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()
Kedua file template skrip launch-c.indan launch-cxx.interlihat seperti ini (harus berada di direktori yang sama dengan CMakeLists.txtfile):
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}" "$@"
Penggunaan di atas RULE_LAUNCH_COMPILEsendiri untuk Unix Makefiles dan Ninja, tetapi untuk generator Xcode bergantung pada bantuan dari CMAKE_XCODE_ATTRIBUTE_...dukungan variabel CMake . Pengaturan dari CCdan CXXatribut Xcode yang ditentukan pengguna untuk mengontrol perintah compiler dan LDdan LDPLUSPLUSuntuk perintah linker, sejauh yang saya tahu, bukanlah fitur yang didokumentasikan dari proyek Xcode, tetapi tampaknya berfungsi. Jika ada yang dapat mengonfirmasi bahwa itu secara resmi didukung oleh Apple, saya akan memperbarui artikel yang ditautkan dan jawaban ini sesuai.