문제

나는 다음을 수행하고 싶습니다 :CCache가 PATH에 있으면 컴파일에 "ccache g++"를 사용하고, 그렇지 않으면 g++를 사용하세요.나는 다음을 포함하는 작은 my-cmake 스크립트를 작성해 보았습니다.

    CC="ccache gcc" CXX="ccache g++" cmake $*

하지만 작동하지 않는 것 같습니다(make를 실행해도 여전히 ccache를 사용하지 않습니다.CMAKE_VERBOSE_MAKEFILE을 사용하여 이를 확인했습니다.)

업데이트:

에 따라 이 링크 스크립트를 다음으로 변경해 보았습니다.

     cmake -D CMAKE_CXX_COMPILER="ccache" -D CMAKE_CXX_COMPILER_ARG1="g++" -D CMAKE_C_COMPILER="ccache" -D CMAKE_C_COMPILER_ARG1="gcc" $*

그러나 cmake는 컴파일러 ccache를 사용하여 테스트가 실패했다고 불평합니다(예상할 수 있음).

도움이 되었습니까?

해결책

나는 개인적으로 /usr/lib/ccache$PATH.이 디렉토리에는 컴파일러가 호출될 수 있는 모든 가능한 이름에 대한 수많은 심볼릭 링크가 포함되어 있습니다(예: gcc 그리고 gcc-4.3), 모두 ccache를 가리키고 있습니다.

그리고 저는 심볼릭 링크도 만들지 않았습니다.Debian에 ccache를 설치할 때 해당 디렉토리는 미리 채워져 있습니다.

다른 팁

이제 ccache를 컴파일 명령 및 링크 명령의 실행 프로그램으로 지정할 수 있습니다(cmake 2.8.0부터).이는 Makefile 및 Ninja 생성기에서 작동합니다.이렇게 하려면 다음 속성을 설정하면 됩니다.

find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
    set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
    set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif(CCACHE_FOUND)

특정 디렉터리나 대상에 대해서만 이러한 속성을 설정할 수도 있습니다.

Ninja의 경우 버전 3.4부터 가능합니다.XCode의 경우 Craig Scott은 답변에서 해결 방법을 제공합니다.

편집하다 :uprego와 Lekensteyn의 의견 덕분에 ccache를 런처로 사용하기 전에 사용할 수 있는지, 어떤 생성기에 대해 컴파일 런처를 사용할 수 있는지 확인하기 위해 답변을 편집했습니다.

CMAKE 3.4부터 다음을 수행할 수 있습니다.

-DCMAKE_CXX_COMPILER_LAUNCHER=ccache

나는 심볼릭 링크를 설정하고 싶지 않았습니다. g++ 에게 ccache.그리고 CXX="ccache g++" 일부 cmake 테스트 케이스에서는 속성 없이 컴파일러 프로그램만 갖고 싶어했기 때문에 작동하지 않았습니다.

그래서 대신 작은 bash 스크립트를 사용했습니다.

#!/bin/bash
ccache g++ "$@"

실행 파일로 저장했습니다. /usr/bin/ccache-g++.

그런 다음 C는 cmake를 사용하도록 구성했습니다. /usr/bin/ccache-g++ C++ 컴파일러로.이렇게 하면 cmake 테스트 케이스를 통과하고 2~3주 후에 잊어버리고 뭔가 작동하지 않는지 궁금해할 수 있는 심볼릭 링크를 갖는 것보다 더 편안함을 느낍니다.

CMake 3.1부터 Xcode 생성기와 함께 ccache를 사용할 수 있으며 Ninja는 CMake 3.4부터 지원됩니다.닌자는 존경할 것이다 RULE_LAUNCH_COMPILE Unix Makefiles 생성기와 비슷하지만(@Babcool의 답변은 Ninja에도 적용됩니다) Xcode 생성기에서 ccache를 작동시키려면 조금 더 많은 작업이 필요합니다.다음 문서에서는 세 가지 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 파일):

발사-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}" "$@"

위의 용도는 RULE_LAUNCH_COMPILE Unix Makefiles 및 Ninja의 경우 단독이지만 Xcode 생성기의 경우 CMake의 도움에 의존합니다. CMAKE_XCODE_ATTRIBUTE_... 변수 지원.설정 CC 그리고 CXX 컴파일러 명령을 제어하기 위한 사용자 정의 Xcode 속성 LD 그리고 LDPLUSPLUS 링커 명령은 내가 아는 한 Xcode 프로젝트의 문서화된 기능은 아니지만 작동하는 것 같습니다.Apple에서 공식적으로 지원하는지 확인할 수 있는 사람이 있으면 그에 따라 링크된 기사와 이 답변을 업데이트하겠습니다.

다음 작품을 확인했습니다(출처: 이 링크):

        CC="gcc" CXX="g++" cmake -D CMAKE_CXX_COMPILER="ccache" -D CMAKE_CXX_COMPILER_ARG1="g++" -D CMAKE_C_COMPILER="ccache" -D CMAKE_C_COMPILER_ARG1="gcc" $*

업데이트:나는 나중에 이것조차도 효과가 없다는 것을 깨달았습니다.이상하게도 매 번 작동합니다(다른 경우에는 cmake가 불평합니다).

내 생각에 가장 좋은 방법은 gcc,g++를 ccache에 심볼릭 링크하는 것이지만, cmake 내에서 사용하려면 다음을 시도해 보십시오.

export CC="ccache gcc" CXX="ccache g++" cmake ...

여기에 이전에 언급되지 않은 중요한 항목을 하나 추가하겠습니다.

ubunutu:18.04 docker 이미지에서 최소한의 빌드 시스템을 부트스트래핑하는 동안 설치 순서에 차이가 있다는 것을 발견했습니다.

내 경우에는 전화할 때 ccache가 제대로 작동했습니다. gcc, 그러나 다른 이름으로 동일한 컴파일러의 호출을 포착하지 못했습니다. cc 그리고 c++.ccache를 완전히 설치하려면 먼저 모든 컴파일러가 설치되어 있는지 확인해야 합니다. 또는 안전을 위해 update-ccache 심볼릭 링크에 대한 호출을 추가하세요.

sudo apt-get install ccache build-essential # and everyhting ... sudo /usr/sbin/update-ccache-symlinks export PATH="/usr/lib/ccache/:$PATH"

...그런 다음 (업데이트된 심볼릭 링크로 인해) cc 및 C++에 대한 호출도 잡힙니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top