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 Makefiles của Unix (vì vậy câu trả lời của Babcool cũng giúp bạn ở đó cho Ninja), nhưng việc nhận ccache làm việc cho trình tạo Xcode mất nhiều công việc hơn một chút. Bài viết sau đây giải thích chi tiết về phương pháp này, tập trung vào việc thực hiện chung cho cả ba máy tạo CMake và không đưa ra giả định về việc thiết lập các liên kết ccache hoặc trình biên dịch cơ bản (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. Sự bắt đầu của tập tin CMakeLists.txt
của bạn nên được thiết lập một cái gì đó như thế này:
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()
Các tập tin mẫu hai kịch bản launch-c.in
và launch-cxx.in
cái nhìn như thế này (họ phải ở trong cùng thư mục với file CMakeLists.txt
):
launch-c.in:
#!/bin/sh
export CCACHE_CPP2=true
exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_C_COMPILER}" "[email protected]"
launch-cxx.in:
#!/bin/sh
export CCACHE_CPP2=true
exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_CXX_COMPILER}" "[email protected]"
Trên đây sử dụng RULE_LAUNCH_COMPILE
mình cho Unix Makefiles và Ninja, nhưng đối với các máy phát điện Xcode nó dựa trên sự giúp đỡ từ hỗ trợ CMAKE_XCODE_ATTRIBUTE_...
biến CMake của. Thiết lập của các thuộc tính Xcode do người dùng định nghĩa CC
và CXX
Xcode do người dùng định nghĩa để điều khiển lệnh biên dịch và LD
và LDPLUSPLUS
cho lệnh trình liên kết không, như tôi có thể nói, tính năng tài liệu của các dự án Xcode, nhưng dường như nó hoạt động. Nếu bất cứ 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.
Nguồn
2016-04-09 10:22:00
Tại sao bạn không gcc chỉ liên kết tượng trưng đến ccache? Và nếu bạn đang phân phối điều này, tôi nghĩ rằng chính người dùng sẽ thực hiện liên kết tượng trưng nếu anh ta đã cài đặt ccache và muốn nó được sử dụng .. – int3
@ int3 Có lẽ điều đó sẽ hoạt động (tôi không biết rằng ccache có trình biên dịch như một đối số tùy chọn). Tuy nhiên nó sẽ sạch hơn để rõ ràng hơn. –