4 # Finds ccache and sets it up as compiler wrapper.
5 # This should ideally be called before the call to project().
7 # See: https://crascit.com/2016/04/09/using-ccache-with-cmake/
9 find_program(CCACHE_PROGRAM ccache)
12 execute_process(COMMAND "${CCACHE_PROGRAM}" --version
13 OUTPUT_VARIABLE CCACHE_VERSION
14 OUTPUT_STRIP_TRAILING_WHITESPACE)
15 string(REGEX MATCH "[^\n]* version [^\n]*" CCACHE_VERSION "${CCACHE_VERSION}")
16 string(REGEX REPLACE ".* version (.*)" "\\1" CCACHE_VERSION "${CCACHE_VERSION}")
19 include(FindPackageHandleStandardArgs)
20 find_package_handle_standard_args(CCache REQUIRED_VARS CCACHE_PROGRAM
21 VERSION_VAR CCACHE_VERSION)
24 # Supports Unix Makefiles, Ninja and Xcode
25 set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}" PARENT_SCOPE)
26 set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}" PARENT_SCOPE)
28 file(WRITE "${CMAKE_BINARY_DIR}/launch-c" "#!/bin/sh\nexec \"${CCACHE_PROGRAM}\" \"${CMAKE_C_COMPILER}\" \"$@\"\n")
29 file(WRITE "${CMAKE_BINARY_DIR}/launch-cxx" "#!/bin/sh\nexec \"${CCACHE_PROGRAM}\" \"${CMAKE_CXX_COMPILER}\" \"$@\"\n")
30 execute_process(COMMAND chmod +x "${CMAKE_BINARY_DIR}/launch-c" "${CMAKE_BINARY_DIR}/launch-cxx")
32 set(CMAKE_XCODE_ATTRIBUTE_CC "${CMAKE_BINARY_DIR}/launch-c" PARENT_SCOPE)
33 set(CMAKE_XCODE_ATTRIBUTE_CXX "${CMAKE_BINARY_DIR}/launch-cxx" PARENT_SCOPE)
34 set(CMAKE_XCODE_ATTRIBUTE_LD "${CMAKE_BINARY_DIR}/launch-c" PARENT_SCOPE)
35 set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS "${CMAKE_BINARY_DIR}/launch-cxx" PARENT_SCOPE)
38 mark_as_advanced(CCACHE_PROGRAM)