2012-03-18 106 views
2

我有一個使用makefile編譯代碼的源代碼目錄。這個makefile/configure文件不是爲兼容ccache而編寫的。所以我想使用ccache。我在.bashrc中創建了別名爲alias gcc='ccache gcc',但Makefile仍然沒有考慮gcc的這個定義。那麼有沒有什麼我可以做,而不碰Makefile/configure文件,因此它需要ccache gcc而不是gcc。 也CC ='ccache gcc'./configure不是一個選項,因爲它不要求CC。使用ccache和make

如果我編寫Makefile,那麼我可以提供$ {gcc),但這不是一個選項,因爲我沒有編寫Makefile。有沒有什麼辦法可以讓我們不需要修改源文件中的任何內容,但仍然可以編譯ccache

+0

那麼,Makefile使用什麼來編譯?是否使用'gcc'而不是'$(CC)'來硬編碼? – 2012-03-18 11:03:20

+0

Makefile由configure創建,它由autoconf創建,雖然makefile解析configure.in。但改變會產生另一個「配置文件已被更改」的問題,所以我正在尋找一種方法,不需要對源文件(makefile/configure)進行任何更改就可以這樣做。 – peeyush 2012-03-18 11:11:27

回答

5

the fine manual所述:在包含真實gcc的路徑之前,在PATH中列出的目錄中創建名爲「gcc」的符號鏈接。這將導致ccache被透明地使用,而不需要對makefile進行任何更改。

7

別名是它們在其中創建的外殼的本地別名;與環境變量不同,它們不會傳遞給shell調用的任何程序(包括make)。調用/ bin/sh,而不是/ bin/bash和/ bin/sh不會讀取你的〜/ .bashrc等,所以沒有定義的別名會對你有幫助。

我不完全確定你爲什麼要對自己提出一些限制:這些事情工作正常,你沒有理由避免他們,我明白。例如,如果autoconf的版本不是真正古老的,則提供與配置不同的CC將工作。你可以這樣做:

./configure CC='ccache gcc' 

例如,這將設置CC的默認值在你的makefile是ccache gcc。我不知道你的意思是「它不要求CC」。

如果你願意,你也可以覆蓋的CCmake命令行設置,如下所示:

make CC='ccache gcc' 

也能正常工作。

+0

我已經提到CC選項不是配置。 gcc在那裏是硬編碼的。換句話說,配置腳本不會查找CC變量。 – peeyush 2012-03-19 06:24:08

+2

如果您使用的是C++代碼,請不要忘記指定CXX ='ccache g ++'... – relascope 2015-05-27 19:01:54