2012-03-18 102 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