2012-03-18 3 views
2

코드를 컴파일하기 위해 makefile을 사용하는 소스 디렉토리가 있습니다. 이 makefile/configure 파일은 ccache 호환성을 위해 작성되지 않았습니다. 그래서 나는 ccache를 사용하려고 생각했다. 나는 별칭을 .bashrc에 alias gcc='ccache gcc'으로 만들었지 만, Makefile은 여전히 ​​gcc의이 정의를 고려하지 않고있다. 그래서 Makefile/configure 파일을 건드리지 않고 할 수있는 일은 gcc 대신에 ccache gcc이됩니다. 또한 CC = 'ccache gcc'./configure는 CC를 묻지 않기 때문에 옵션이 아닙니다.make와 함께 ccache 사용

Makefile을 작성하면 $ {gcc}를 제공 할 수 있지만 Makefile을 작성하지 않으므로이 옵션이 아닙니다. 소스 파일에서 아무 것도 변경할 필요가 없지만 ccache을 컴파일 할 수있는 방법이 있습니까?

+0

글쎄, 그럼 Makefile은 컴파일하는데 무엇을 사용합니까? '$ (CC)'가 아닌'gcc '를 사용하도록 하드 코딩되어 있습니까? –

+0

Makefile은 configure에 의해 만들어지며, makefile은 configure.in을 분석하지만 autoconf로 만들어집니다. 하지만 "configure file이 변경되었습니다"라는 또 다른 문제가 생기므로 소스 파일 (makefile/configure)을 변경하지 않고서도 그렇게 할 수있는 방법을 찾고있었습니다. – peeyush

답변

5

the fine manual으로 설명 : 실제 gcc가 들어있는 디렉토리 앞에 PATH에 나열된 디렉토리에 "gcc"라는 심볼릭 링크를 만듭니다. 이렇게하면 makefile을 변경할 필요없이 ccache가 투명하게 사용됩니다.

7

별명은 작성된 쉘에 국지적입니다. 환경 변수와는 달리 쉘이 호출하는 프로그램 (make 포함)에는 전달되지 않습니다. make는/bin/sh가 아닌/bin/sh를 호출하고/bin/sh는 ~/.bashrc 등을 읽지 않으므로 거기에 정의 된 별칭이 도움이되지 않습니다.

나는 왜 자신이 언급 한 몇 가지 제한 사항을 왜 배치했는지 정확히 알지 못합니다. 이러한 것들이 잘 작동하고 이해할 수있는 이유가 없습니다. 예를 들어, autoconf의 버전이 정말로 고대가 아니면 으로 다른 CC를 제공하면이 작동합니다. 예를 들어

./configure CC='ccache gcc' 

및 그 ccache gcc로 당신의 메이크에 CC의 기본값을 설정합니다 : 당신은이 작업을 수행 할 수 있습니다. "은 CC"을 요구하지 않습니다. 또한 잘 작동

make CC='ccache gcc' 

: 당신이 원하는 경우

, 당신은 또한이 같은 make 명령 줄에서 CC의 설정을 재정의 할 수 있습니다.

+0

이것은 CC 옵션이 구성이 아니라고 이미 언급했습니다. gcc는 하드 코딩되어 있습니다. 즉, configure 스크립트는 CC 변수를 찾지 않습니다. – peeyush

+2

C++ 코드를 사용하는 경우 CXX = 'ccache g ++'을 지정하는 것을 잊지 마십시오 ... – relascope