首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ccache和Make?

如何使用ccache和Make?
EN

Stack Overflow用户
提问于 2012-03-18 10:02:20
回答 3查看 14.9K关注 0票数 8

我有一个源目录,它使用makefile编译代码。此makefile/配置文件的编写并不是为了实现ccache兼容性。所以我想用ccache。我在.bashrc中将别名创建为alias gcc='ccache gcc',但是Makefile仍然没有考虑gcc的这个定义。那么,我是否可以不接触Makefile/configure文件而不使用ccache gcc而不是gcc来做什么。此外,CC='ccache gcc‘./配置不是一个选项,因为它不要求CC。

如果我写Makefile,那么我可以提供${gcc),但这不是一个选项,因为我不是写Makefile。是否有任何方式不需要更改源文件中的任何内容,但仍然支持ccache编译。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-27 16:51:09

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

票数 9
EN

Stack Overflow用户

发布于 2012-03-18 19:08:11

别名是它们在其中创建的shell的本地名称;与环境变量不同,它们不会传递给shell调用的任何程序(包括make)。让调用/bin/sh、no /bin/bash和/bin/sh不读取您的~/..bashrc等等,因此在那里定义的别名不会对您有帮助。

我不太清楚你为什么会把你提到的一些限制强加给自己:这些都很好,而且你没有给出我所理解的避免这些限制的理由。例如,如果autoconf的版本并不是很古老的话,提供不同的CC配置就可以了。你可以这样做:

代码语言:javascript
复制
./configure CC='ccache gcc'

例如,这将将makefile中的CC的默认值设置为ccache gcc。我不知道你说的“它不要求CC”是什么意思。

如果您愿意,还可以覆盖make命令行上的make设置,如下所示:

代码语言:javascript
复制
make CC='ccache gcc'

效果也很好。

票数 10
EN

Stack Overflow用户

发布于 2018-09-14 15:25:55

向路径添加打包的ccache

代码语言:javascript
复制
PATH="/usr/lib/ccache:${PATH}" make

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

  • 同时适用于所有编译器: C、C++等。
  • 更少地依赖于实际的Makefile设置,比如CC可以
  • 如果您正在自动化某些东西并且目标用户没有安装ccache,则不会破坏人们的构建

man ccache上提到

要在Debian系统上使用第二种方法,最简单的方法是将/usr/lib/ccache添加到您的路径中。/usr/lib/ccache包含当前作为Debian包安装的所有编译器的符号链接。

你可以用以下方法确认:

代码语言:javascript
复制
ls -l /usr/lib/ccache

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

代码语言:javascript
复制
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上测试。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9757436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档