2010-01-05 6 views
4

저는 cmake를 사용하여 메이크 파일을 만듭니다. cmake는 절대 pathes를 포함하는 gcc 행을 생성합니다. 컴파일 속도를 높이기 위해 저는 ccache를 사용합니다.ccache와 절대 경로

여러 위치에서 동일한 코드를 작성합니다 (예 : 여러 개발자가 각각 홈 디렉토리 아래에서 동일한 코드를 컴파일하면 ccache 캐시 미스가 발생합니다).

봤지만 좋은 대답을 찾을 수 없습니다.

+0

절대 경로가 GCC 스위치에 영향을 미치거나 후 처리 소스로 들어가는 경로입니까? 'ccache'는 보통 스위치와 해시 된 후 처리 소스만을 고려합니다; 절대 경로는 중요하지 않아야합니다. ('CCACHE_UNIFY'는 예외입니다.) – ephemient

+0

'-I/home/nicolas/src/foo/lib'는 유효한 gcc 스위치이고 다른 동일한 컴파일을 가지고 있지만 디렉토리에'-I/home/ephemient/src/foo/lib'는 캐시 미스를 일으킬 것입니다. 그것은 내 컴파일로 만든 캐시 항목과 일치하지 않습니다. 그게 그가 의미했던 것 같아. –

+1

아니요,'ccache'는 전처리기에 만 영향을 주어야하는'-I'와 다른 pathy 플래그를 명시 적으로 무시하므로 일반적인 경우 (예 : 괜찮습니다)가 좋습니다. – ephemient

답변

1

글쎄, 어쩌면 명백한 진술 : 상대 경로를 생성하려면 cmake를 가져야하고, 차이가 절대 경로 인 경우 캐시 항목을 일치로 간주하도록 수정해야합니다.

캐시 항목의 이름을 지정하는 데 사용되는 해시를 계산할 때 -pipe 옵션을 무시하도록 ccache 복사본을 수정했습니다. 이 옵션은 컴파일러 출력에 차이를 일으키지 않으므로 속도 만 다릅니다. 해시를 계산할 때 경로에서 초기/home/*/스트립을 제거하는 것이 그리 어렵지 않을 수도 있습니다.

4

위에서 언급 한 것처럼 전 처리기 라인 지시문의 절대 경로가 ccache로 해시되고 컴파일러 옵션 -g이 사용되면 컴파일러에서 소스 코드 파일의 절대 경로도 방출합니다 . 또 다른 비슷한 문제는 코드가 __FILE__ 매크로를 확장 한 경우 소스 코드 파일의 경로가 명령 줄에서 절대 경로 인 경우 해당 경로가 해시됨을 의미합니다.

해결책은 며칠 전에 발표 된 ccache 3.0으로 업그레이드하는 것입니다. 적중률을 높이기 위해 상대 경로에 절대 경로를 다시 쓰는 옵션 지원이 있습니다. 설명서의 Compiling in different directories을 참조하십시오.

+0

이 새 버전은 멋지게 들립니다 ... –