我有一个使用makefile编译代码的源目录。此makefile/configure文件不是为了ccache兼容性而编写的。所以我想用ccache。我在.bashrc中创建了别名alias gcc='ccache gcc'
,但是Makefile仍然没有考虑gcc的这个定义。那么有没有什么我可以做的,而不接触Makefile/configure
文件,使它采取ccache gcc
,而不是gcc
。此外,CC ='ccache gcc' ./configure也不是选项,因为它不要求CC。
如果我写Makefile,那么我可以提供${gcc),但这不是一个选项,因为我没有写Makefile。有没有什么方法可以让我们不需要改变源文件中的任何东西,但仍然可以编译ccache
?
3条答案
按热度按时间plicqrtu1#
别名是在其中创建它们的shell的本地别名;与环境变量不同,它们不会传递给shell调用的任何程序(包括make)。make调用/bin/sh,而不是/bin/bash,并且/bin/sh不会读取你的~/. bashrc等等。所以这里没有定义别名对你有帮助。
我不太清楚你为什么要对自己施加一些限制:这些东西工作正常,你没有给一个理由,以避免他们,我理解。例如,如果autoconf的版本不是很旧,那么使用configure * 将 * 提供不同的CC。你可以这样做:
例如,这将在makefile中将
CC
的默认值设置为ccache gcc
。我不知道你说的“* 它不要求CC *”是什么意思。如果您愿意,也可以在
make
命令行上覆盖CC
的设置,如下所示:这也很好用
biswetbf2#
如精细手册所述:创建一个名为“gcc”的符号链接,该链接位于PATH中包含真实的gcc的目录之前。这将导致ccache被透明地使用,而不需要对makefile进行任何更改。
iugsix8n3#
将打包的ccache添加到
PATH
这是一种通用的方法,即:
CC
那样依赖于实际的Makefile
设置ccache
,则不会破坏用户的构建在
man ccache
中提到:要在Debian系统上使用第二种方法,最简单的方法是将/usr/lib/ccache前置到PATH。/usr/lib/ccache包含当前作为Debian软件包安装的所有编译器的符号链接。
您可以通过以下方式进行确认:
其中包含大量可能的GCC名称,包括用于已安装的交叉编译器的名称:
在Ubuntu 16.04上测试。