Từ CMake 3.1, có thể sử dụng ccache với trình tạo Xcode và Ninja được hỗ trợ từ CMake 3.4 trở đi. Ninja sẽ tôn vinh RULE_LAUNCH_COMPILE
giống như trình tạo Unix Makefiles (vì vậy câu trả lời của @ Babcool cũng giúp bạn đạt được điều đó cho Ninja), nhưng để ccache hoạt động cho trình tạo Xcode mất nhiều công hơn một chút. Bài viết sau giải thích chi tiết phương pháp này, tập trung vào triển khai chung hoạt động cho cả ba trình tạo CMake và không đưa ra giả định nào về việc thiết lập liên kết tượng trưng ccache hoặc trình biên dịch cơ bản được sử dụng (nó vẫn cho phép CMake quyết định trình biên dịch):
https://crascit.com/2016/04/09/using-ccache-with-cmake/
Ý chính chung của bài viết như sau. Phần bắt đầu của CMakeLists.txt
tệp của bạn nên được thiết lập như sau:
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()
Hai tệp mẫu tập lệnh launch-c.in
và launch-cxx.in
trông giống như sau (chúng phải nằm trong cùng thư mục với CMakeLists.txt
tệp):
khởi chạy-c.in:
#!/bin/sh
export CCACHE_CPP2=true
exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_C_COMPILER}" "$@"
khởi chạy-cxx.in:
#!/bin/sh
export CCACHE_CPP2=true
exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_CXX_COMPILER}" "$@"
Ở trên chỉ sử dụng RULE_LAUNCH_COMPILE
cho Unix Makefiles và Ninja, nhưng đối với trình tạo Xcode, nó dựa vào sự trợ giúp từ CMAKE_XCODE_ATTRIBUTE_...
hỗ trợ các biến của CMake . Theo như tôi có thể nói, việc thiết lập các thuộc tính Xcode CC
và do CXX
người dùng xác định để điều khiển lệnh trình biên dịch LD
và LDPLUSPLUS
cho lệnh trình liên kết, theo như tôi có thể nói, không phải là một tính năng được ghi chép bằng tài liệu của các dự án Xcode, nhưng nó dường như hoạt động. Nếu ai đó có thể xác nhận nó được Apple hỗ trợ chính thức, tôi sẽ cập nhật bài viết được liên kết và câu trả lời này cho phù hợp.