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_COMPILE
seperti 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.txt
file 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.in
dan launch-cxx.in
terlihat seperti ini (harus berada di direktori yang sama dengan CMakeLists.txt
file):
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_COMPILE
sendiri untuk Unix Makefiles dan Ninja, tetapi untuk generator Xcode bergantung pada bantuan dari CMAKE_XCODE_ATTRIBUTE_...
dukungan variabel CMake . Pengaturan dari CC
dan CXX
atribut Xcode yang ditentukan pengguna untuk mengontrol perintah compiler dan LD
dan LDPLUSPLUS
untuk 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.