CMake 3.1 から、Xcode ジェネレーターで ccache を使用することが可能になり、Ninja は CMake 3.4 以降でサポートされます。Ninja はRULE_LAUNCH_COMPILE
Unix Makefiles ジェネレーターと同じように尊重します (したがって、@Babcool の答えは Ninja にも対応します) が、Xcode ジェネレーターで ccache を機能させるには、もう少し作業が必要です。次の記事では、3 つの 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()
2 つのスクリプト テンプレート ファイルは次のようにlaunch-c.in
なります (ファイルとlaunch-cxx.in
同じディレクトリにある必要がありCMakeLists.txt
ます)。
起動-c.in:
#!/bin/sh
export CCACHE_CPP2=true
exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_C_COMPILER}" "$@"
起動-cxx.in:
#!/bin/sh
export CCACHE_CPP2=true
exec "${RULE_LAUNCH_COMPILE}" "${CMAKE_CXX_COMPILER}" "$@"
上記はUnix Makefile と Ninja に対して単独で使用しますが、Xcode ジェネレーターに対しては、CMake の変数サポートRULE_LAUNCH_COMPILE
の助けに依存しています。コンパイラ コマンドとリンカー コマンドを制御するユーザー定義の Xcode 属性CMAKE_XCODE_ATTRIBUTE_...
の設定は、CC
私が知る限り、Xcode プロジェクトの文書化された機能ではありませんが、機能しているようです。Apple によって公式にサポートされていることを誰かが確認できれば、リンクされた記事とこの回答を適宜更新します。CXX
LD
LDPLUSPLUS