如何在Make中使用ccache?

mbskvtky  于 2023-05-22  发布在  其他
关注(0)|答案(3)|浏览(237)

我有一个使用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

plicqrtu

plicqrtu1#

别名是在其中创建它们的shell的本地别名;与环境变量不同,它们不会传递给shell调用的任何程序(包括make)。make调用/bin/sh,而不是/bin/bash,并且/bin/sh不会读取你的~/. bashrc等等。所以这里没有定义别名对你有帮助。
我不太清楚你为什么要对自己施加一些限制:这些东西工作正常,你没有给一个理由,以避免他们,我理解。例如,如果autoconf的版本不是很旧,那么使用configure * 将 * 提供不同的CC。你可以这样做:

./configure CC='ccache gcc'

例如,这将在makefile中将CC的默认值设置为ccache gcc。我不知道你说的“* 它不要求CC *”是什么意思。
如果您愿意,也可以在make命令行上覆盖CC的设置,如下所示:

make CC='ccache gcc'

这也很好用

biswetbf

biswetbf2#

如精细手册所述:创建一个名为“gcc”的符号链接,该链接位于PATH中包含真实的gcc的目录之前。这将导致ccache被透明地使用,而不需要对makefile进行任何更改。

iugsix8n

iugsix8n3#

将打包的ccache添加到PATH

PATH="/usr/lib/ccache:${PATH}" make

这是一种通用的方法,即:

  • 同时适用于所有编译器:C、C++等
  • 不像CC那样依赖于实际的Makefile设置
  • 如果您正在自动化某些内容,并且目标用户没有安装ccache,则不会破坏用户的构建

man ccache中提到:
要在Debian系统上使用第二种方法,最简单的方法是将/usr/lib/ccache前置到PATH。/usr/lib/ccache包含当前作为Debian软件包安装的所有编译器的符号链接。
您可以通过以下方式进行确认:

ls -l /usr/lib/ccache

其中包含大量可能的GCC名称,包括用于已安装的交叉编译器的名称:

total 0
lrwxrwxrwx 1 root root 16 May  6 13:51 aarch64-linux-gnu-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 aarch64-linux-gnu-gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jun 23 18:25 arm-linux-gnueabi-g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jun 23 18:25 arm-linux-gnueabi-g++-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-linux-gnueabi-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-linux-gnueabi-gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May 28 22:11 arm-linux-gnueabihf-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May 28 22:11 arm-linux-gnueabihf-gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-none-eabi-g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-none-eabi-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-none-eabi-gcc-6.3.1 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 c++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 c89-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 c99-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 cc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 clang -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 clang++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc-7 -> ../../bin/ccache

在Ubuntu 16.04上测试。

相关问题