จาก 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 รองรับอย่างเป็นทางการฉันจะอัปเดตบทความที่เชื่อมโยงและคำตอบนี้ตามนั้น