这是可以使用我们的多个免费在线工作站之一(例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器)在 OnWorks 免费托管服务提供商中运行的命令 ccache
程序:
您的姓名
ccache - 一个快速的 C/C++ 编译器缓存
概要
缓存 [选项]
缓存 编译 [编译 选项]
编译 [编译 选项](通过符号链接)
商品描述
ccache 是编译器缓存。 它通过缓存先前的结果来加速重新编译
编译并检测何时再次进行相同的编译。 支持的
语言包括 C、C++、Objective-C 和 Objective-C++。
ccache 已被仔细编写,以始终生成完全相同的编译器输出
你会得到没有缓存。 你应该能够告诉你的唯一方法
使用ccache是速度。 目前已知的此目标的例外情况列在 BUGS 下。
如果您发现 ccache 更改了您的输出的未记录情况
编译器,请告诉我们。
功能
· 保持命中/未命中的统计数据。
· 自动缓存大小管理。
· 可以缓存生成警告的编译。
· 简易安装。
· 低开销。
· 尽可能使用硬链接以避免复制。
· 可选择压缩缓存中的文件以减少磁盘空间。
限制
· 只知道如何缓存单个C/C++/Objective-C/Objective-C++的编译
文件。 其他类型的编译(多文件编译、链接等)将静默
回退到运行真正的编译器。
· 仅适用于行为足够相似的 GCC 和编译器。
· 不支持某些编译器标志。 如果检测到这样的标志,ccache 将
默默地回退到运行真正的编译器。
跑 模式
有两种方法可以使用 ccache。 您可以为编译命令添加前缀
缓存 或者你可以通过创建一个符号链接(命名为
作为编译器)到 ccache。 如果你只是想尝试,第一种方法最方便
out ccache 或希望将其用于某些特定项目。 第二种方法最有用
当您希望将 ccache 用于所有编译时。
要在 Debian 系统上使用第二种方法,最简单的方法是在前面加上 /usr/lib/缓存
您的 PATH. /usr/lib/缓存 包含当前安装的所有编译器的符号链接
Debian 软件包。
或者,您可以像这样创建自己喜欢的任何符号链接:
ln -s /usr/bin/ccache /usr/local/bin/gcc
ln -s /usr/bin/ccache /usr/local/bin/g++
ln -s /usr/bin/ccache /usr/local/bin/cc
ln -s /usr/bin/ccache /usr/local/bin/c++
等等。 只要带有符号链接的目录出现在路径之前,这就会起作用
到编译器(通常在 / usr / bin)。 安装后,您可能希望运行
“which gcc”以确保正在使用正确的链接。
警告
让 ccache 伪装成编译器的技术运行良好,但目前
不能与做同样事情的其他工具很好地交互。 请参阅将 CCACHE 用于
其他编译器包装器。
警告
不要使用硬链接,使用符号链接。 硬链接会导致“有趣”
问题。
配置
这些选项仅在您将 ccache 调用为“ccache”时才适用。 作为编译器调用时
(通过上一节中描述的符号链接),正常的编译器选项适用
你应该参考编译器的文档。
-C, - 清理
通过删除旧的缓存文件来清理缓存,直到指定的文件号和
未超出缓存大小限制。 这也会重新计算缓存文件计数和
大小总计。 通常情况下,不需要手动启动清理,因为 ccache 保持
运行时缓存低于指定的限制并保持最新的统计信息
每次编译。 如果您手动修改缓存,强制清理最有用
内容或认为缓存大小统计信息可能不准确。
-C, - 清除
清除整个缓存,删除所有缓存文件,但保留配置文件。
-F, --最大文件=N
设置缓存中允许的最大文件数。 使用 0 表示没有限制。 价值是
存储在缓存目录中的配置文件中,适用于所有未来
汇编。
-H, - 帮帮我
打印选项摘要页。
-M, --最大尺寸=尺寸
设置缓存中存储的文件的最大大小。 尺寸 应该是一个数字
后跟一个可选的后缀:k、M、G、T(十进制)、Ki、Mi、Gi 或 Ti(二进制)。 这
默认后缀为 G。使用 0 表示没有限制。 该值存储在配置文件中
在缓存目录中并适用于所有未来的编译。
-o, --设置配置=键=值
设置配置 KEY 至 VALUE. 有关详细信息,请参阅配置。
-p, --打印配置
打印当前配置选项及其来源(环境
变量、配置文件或编译时默认值)。
-是的, --显示统计
打印缓存的当前统计摘要。
-V, - 版
印刷版本和版权信息。
-z --零统计
将缓存统计信息归零(但不是配置选项)。
额外服务 配置
当作为编译器运行时,ccache 通常只采用与
您正在使用的编译器。 唯一的例外是选项 --ccache-跳过。 该
option 可用于告诉 ccache 避免以任何方式解释下一个选项并
将它按原样传递给编译器。 备注: --ccache-跳过 目前只告诉 ccache 不是
将下一个选项解释为一个特殊的编译器选项——该选项仍然是
包含在直接模式哈希中。
这很重要的原因是 ccache 确实需要解析命令行和
确定什么是输入文件名以及什么是编译器选项,因为它需要输入
filename 来确定生成的目标文件的名称(除其他外)。 这
解析命令行时使用的启发式 ccache 是任何作为参数存在的参数
file 被视为输入文件名。 通过使用 --ccache-跳过 你可以强制一个选项
不被视为输入文件名,而是作为一个传递给编译器
命令行选项。
另一种情况 --ccache-跳过 如果 ccache 专门解释一个选项,可能会很有用
但不应该,因为该选项对您的编译器具有不同于 ccache 的含义
想。
配置
ccache 的默认行为可以被配置文件设置覆盖,反过来
可以被名称以开头的环境变量覆盖 缓存_. 缓存
通常从两个文件中读取配置:首先是系统级配置文件和
其次是缓存特定的配置文件。 配置设置的优先级是
如下(其中 1 最高):
1. 环境变量。
2.缓存特定的配置文件 /ccache.conf (通常
$HOME/.ccache/ccache.conf).
3.全系统配置文件 /ccache.conf (通常
/etc/ccache.conf or /usr/local/etc/ccache.conf).
4. 编译时默认值。
作为一种特殊情况,如果环境变量 CCACHE_CONFIGPATH 已设置,ccache 读取
从指定路径而不是默认路径进行配置。
配置 文件 句法
配置文件采用简单的“key = value”格式,每行一个设置。 线
以井号开头的是注释。 空白行被忽略,空白也被忽略
围绕键和值。 例子:
# 将最大缓存大小设置为 10 GB:
最大尺寸 = 10G
布尔 价值观
一些设置是布尔值(即真值)。 在配置文件中,这样的值
必须设置为字符串 true or false. 对于相应的环境变量,
语义有点不同:设置的环境变量意味着“真”,而不管
值(即使设置为空字符串),未设置的环境变量意味着“假”。
每个布尔环境变量也有一个否定形式,以 CCACHE_NO。 对于
例, CCACHE_COMPRESS 压缩 可以设置为强制压缩和 CCACHE_NOCOMPRESS 可以设定
强制不压缩。
配置 设置
以下是可用配置设置的列表。 对应环境
每个配置设置键后的括号中表示变量名称。 布尔值
选项用“[boolean]”表示
基目录 (CCACHE_BASEDIR)
此设置应该是目录的绝对路径。 ccache 然后重写绝对
在计算标识编译的哈希之前将路径转换为相对路径,
但仅适用于指定目录下的路径。 如果设置为空字符串(即
默认),不进行重写。 另见编译下的讨论
不同的目录。
缓存目录 (缓存目录)
此设置指定 ccache 将保留其缓存的编译器输出的位置。 它会
仅在系统范围的配置文件或环境中设置时才生效
多变的。 默认是 $HOME/.ccache.
缓存目录级别 (CCACHE_NLEVELS)
此设置允许您选择缓存中的目录级别数
目录。 默认值为 2。最小值为 1,最大值为 8。
编译 (CCACHE_CC)
此设置可用于强制使用编译器的名称。 如果设置为空
字符串(这是默认值),ccache 从命令行计算出来。
编译器检查 (CCACHE_COMPILERCHECK)
默认情况下,ccache 包括编译器的修改时间(“mtime”)和大小
以确保从缓存中检索到的结果是准确的。 这个设置
可用于选择另一种策略。 可能的值为:
内容
散列编译器二进制文件的内容。 这使得 ccache 非常慢
相比于 修改时间 设置,但使其更好地应对编译器升级
在构建引导过程中。
修改时间
散列编译器的 mtime 和大小,这很快。 这是默认设置。
没有
不要散列任何东西。 这可能适用于您可以安全使用
即使编译器的 mtime 或大小已更改(例如,如果
编译器是作为构建系统的一部分构建的,并且编译器的源代码没有
更改,或者如果编译器只有不影响代码生成的更改)。
你应该只使用 没有 设置,如果你知道你在做什么。
字符串值
使用 VHDL 语言编写 折扣值 作为计算哈希的字符串。 这可以是编译器修订版
您之前检索并通过环境变量在此处设置的数字。
a 命令 绳子
散列指定命令的标准输出和标准错误输出。 这
字符串将在空白处拆分以找出要运行的命令和参数。
不会对命令字符串进行其他解释,除了
特殊词 %编译器% 将被替换为编译器的路径。 一些
命令可以用分号作为分隔符指定。 例子:
· %编译器% -v
· %compiler% -dumpmachine; %compiler% -dumpversion
您应该确保指定的命令尽可能快,因为它
将为每个 ccache 调用运行一次。
如果您想避免缓存,使用命令识别编译器很有用
编译器已重建但未更改时未命中。
另一种情况是编译器(如 ccache 所见)实际上不是真正的
编译器但另一个编译器包装器——在这种情况下,默认 修改时间 方法
将散列另一个编译器包装器的 mtime 和大小,这意味着
ccache 将无法检测到编译器升级。 使用合适的命令
识别编译器因此更安全,但它也更慢,所以你应该考虑
继续使用 修改时间 方法结合 前缀命令 设置如果
可能的。 请参阅将 CCACHE 与其他编译器包装器一起使用。
压片 (CCACHE_COMPRESS 压缩) [布尔值]
如果为 true,ccache 将压缩目标文件和它放入的其他编译器输出
缓存。 但是,此设置对如何从缓存中检索文件没有影响;
无论此设置如何,压缩和未压缩的结果仍然可用。
默认值为假。
压缩级别 (CCACHE_COMPRESSLEVEL)
此设置确定 ccache 将压缩目标文件的级别。 它只是
有效,如果 压片 已启用。 该值默认为 6,且不得低于
小于 1(最快、最差压缩)且不高于 9(最慢、最佳压缩)。
cpp_扩展名 (CCACHE_扩展)
此设置可用于强制中间的某个扩展
预处理文件。 默认是自动确定要使用的扩展名
基于正在编译的文件类型的中间预处理器文件,但是
有时不起作用。 例如,在 HP-UX 上使用“aCC”编译器时,设置
cpp 扩展到 i.
直接模式 (直接缓存) [布尔值]
如果为 true,则将使用直接模式。 默认值为真。 请参阅直接模式。
关闭 (CCACHE_DISABLE 关闭) [布尔值]
当为 true 时,ccache 将只调用真正的编译器,完全绕过缓存。
默认值为假。
extra_files_to_hash (CCACHE_EXTRAFILES)
此设置是 ccache 将包含在哈希总和中的文件路径列表
标识构建。 列表分隔符是 Windows 系统上的分号和冒号
在其他系统上。
硬链接 (CCACHE_HARDLINK) [布尔值]
如果为 true,ccache 将在创建时尝试使用缓存目录中的硬链接
编译器输出而不是使用文件副本。 使用硬链接可能会稍微
在某些情况下更快,但可能会混淆依赖于“make”的程序
修改次数。 要记住的另一件事是,如果生成的目标文件
以任何方式修改,这也会破坏缓存的目标文件。 硬链接是
从来没有用于压缩缓存文件。 这意味着您不应启用
如果要使用硬链接,请进行压缩。 默认值为假。
哈希目录 (CCACHE_哈希目录) [布尔值]
如果为 true,ccache 将在哈希中包含当前工作目录,用于
区分两种编译。 这可以防止电流存储出现问题
目标文件的调试信息中的工作目录,这可以导致 ccache 给出一个
缓存的目标文件在调试信息中的工作目录设置不正确。
此选项默认关闭,因为此调试信息的错误设置很少
导致问题。 如果您遇到 GDB 没有使用正确目录的问题,那么
启用此选项。
日志文件 (CCACHE_LOGFILE文件)
如果设置为文件路径,ccache 会将有关其正在执行的操作的信息写入
指定的文件。 这对于跟踪问题很有用。
最大文件数 (CCACHE_MAXFILES 文件)
此选项指定要保留在缓存中的最大文件数。 使用 0 表示否
限制(这是默认值)。
最大尺寸 (CCACHE_MAXSIZE)
此选项指定缓存的最大大小。 使用 0 表示没有限制。 默认的
价值是5G。 可用的后缀:k、M、G、T(十进制)和 Ki、Mi、Gi、Ti(二进制)。 这
默认后缀是“G”。
径 (缓存路径)
如果设置,ccache 将在查找真正的目录时搜索此列表中的目录
编译器。 列表分隔符在 Windows 系统上是分号,在其他系统上是冒号
系统。 如果未设置,ccache 将查找与编译器匹配的第一个可执行文件
正常名称 PATH 这不是 ccache 本身的符号链接。
前缀命令 (CCACHE_PREFIX 文件)
此选项向命令行添加前缀列表(以空格分隔)
ccache 在调用编译器时使用。 另请参阅将 CCACHE 与其他编译器一起使用
包装纸。
只读 (CCACHE_READONLY) [布尔值]
如果为 true,ccache 将尝试使用现有的缓存对象文件,但不会使用
尝试向缓存中添加任何新内容。 如果您使用它是因为您的 ccache
目录是只读的,那么你需要设置 临时目录 否则 ccache 会
无法创建临时文件。
只读直接 (CCACHE_READONLY_DIRECT) [布尔值]
就像 只读 除了 ccache 只会尝试从
缓存使用直接模式,而不是预处理器模式。 请参阅文档
只读 关于使用只读 ccache 目录。
重新缓存 (CCACHE_RECACHE 缓存) [布尔值]
如果为 true,ccache 将不使用任何先前存储的结果。 新的结果仍将是
缓存,可能会覆盖任何预先存在的结果。
运行第二个cpp (CCACHE_CPP2) [布尔值]
如果为 true,ccache 将不会使用避免第二次调用的优化
预处理器通过编译用于查找哈希的预处理输出
在缓存未命中的情况下。 这主要是一个调试选项,虽然它是
可能一些不寻常的编译器在编译
预处理输出,在这种情况下,此选项可以允许使用 ccache。
s (CCACHE_SLOPPINESS)
默认情况下,ccache 尝试提供尽可能少的虚假缓存命中。 然而,在
在某些情况下,您可能知道 ccache 无法处理的事情
的确。 这个设置可以告诉 ccache 放宽一些检查顺序
以提高命中率。 该值应该是带有选项的逗号分隔字符串。
可用选项有:
文件宏
忽略 __文件__ 存在于源中。
文件统计匹配
ccache 通常会检查文件的内容以确定它是否与
缓存版本。 设置此选项后,ccache 将认为文件与其匹配
如果大小、mtimes 和 ctimes 匹配,则缓存版本。
包含文件时间
默认情况下,如果文件包含其 ctime 的标头,ccache 也不会缓存文件
太新了。 此选项禁用该检查。
包含文件时间
默认情况下,如果文件包含 mtime 为
太新了。 此选项禁用该检查。
pch_定义
预编译头文件时对#defines 马虎。 见预编译头文件
获取更多信息。
时间宏
忽略 __日期__ 和 __时间__ 存在于源代码中。
有关更多信息,请参阅故障排除下的讨论。
统计 (CCACHE_统计数据) [布尔值]
如果为 true,ccache 将在每次编译时更新统计计数器。 默认的
是真的。
临时目录 (CCACHE_TEMPDIR)
此设置指定 ccache 将放置临时文件的位置。 默认是
/ tmp目录.
备注
在以前版本的 ccache 中, CCACHE_TEMPDIR 必须与相同的文件系统
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 缓存目录 路径,但此要求已放宽。)
遮罩 (CCACHE_UMASK)
此设置为 ccache 和所有子进程(例如
编译器)。 当您希望与其他用户共享缓存时,这非常有用。
请注意,这也会影响从创建的目标文件上设置的文件权限
你的合辑。
统一 (CCACHE_UNIFY) [布尔值]
如果为 true,ccache 将在散列预处理器输出时使用 C/C++ 统一符,如果
-g 选项未使用。 统一器比普通散列慢,所以设置这个
环境变量会损失一点速度,但这意味着ccache可以
当对源代码的更改包括以下内容时不重新编译的优势
只能重新格式化。 请注意,启用统一器会更改哈希,因此缓存
启用统一程序时生成的编译无法在统一程序启用时重用
禁用,反之亦然。 启用统一器可能会导致行号不正确
编译器警告消息和扩展中的信息 __线__ 宏。 还
请注意,启用统一器意味着关闭直接模式。
CACHE 尺寸 项目管理
默认情况下,ccache 对缓存中文件的总大小有 XNUMX GB 的限制,并且
没有最大文件数。 您可以使用 -M/--最大尺寸 和
-F/--最大文件 选项。 用 缓存 -s/--显示统计 查看缓存大小和当前
配置的限制(除了其他各种统计数据)。
CACHE 压缩
ccache 可以选择使用压缩来压缩它放入缓存中的所有文件
图书馆 zlib。 虽然这可能会导致轻微的性能下降,但它会增加数量
适合缓存的文件。 您可以使用 压片
配置设置,您还可以调整压缩级别 压缩级别.
如何 高速缓存 工作
基本思想是检测您何时第二次编译完全相同的代码并
重用之前产生的输出。 检测是通过散列不同种类的
对于编译应该是唯一的信息,然后使用散列和来
识别缓存的输出。 ccache 使用 MD4,一种非常快速的加密哈希算法,用于
散列。 (现在 MD4 太弱而无法在加密上下文中使用,但是它
应该足够安全以用于识别重新编译。)在缓存命中时,ccache 是
能够提供所有正确的编译器输出(包括所有警告、依赖
文件等)从缓存。
ccache 有两种检测方式:
· 这 直接 模式,其中 ccache 散列源代码并直接包含文件
· 这 预处理器 模式,其中 ccache 在源代码上运行预处理器和
散列结果
直接模式通常更快,因为运行预处理器有一些开销。
相当常见 哈希 信息
对于这两种模式,散列中包含以下信息:
· 编译器为带有预处理器输出的文件使用的扩展名(通常 .i
对于 C 代码和 .ii 对于 C++ 代码)
· 编译器的大小和修改时间(或其他编译器特定的信息
由指定 编译器检查 环境)
· 编译器的名称
· 当前目录(如果 哈希目录 设置已启用)
· 指定的文件内容 extra_files_to_hash 设置(如果有)
这个 直接 模式
在直接模式下,散列由公共信息和:
· 输入源文件
· 命令行选项
基于散列,在缓存中查找称为“清单”的数据结构。 这
清单包含:
· 对缓存编译结果(目标文件、依赖文件等)的引用
由与哈希匹配的先前编译生成
· 编译结果被读取的包含文件的路径
存储在缓存中
· 编译结果存储时包含文件的散列和
缓存
然后对包含文件的当前内容进行散列并与信息进行比较
在清单中。 如果匹配,ccache 就会知道编译的结果。 如果有
不匹配,ccache 回退到运行预处理器。 从输出
解析预处理器以查找读取的包含文件。 路径和哈希和
然后将其中的包含文件连同有关这些文件的信息一起存储在清单中
产生编译结果。
直接模式有一个问题:编译器使用的头文件是
记录,但头文件 而不去 使用过,但如果它们存在就会被使用,
不是。 因此,当 ccache 检查是否可以从缓存中获取结果时,它当前
无法检查新头文件的存在是否会使结果无效。 在
在实践中,直接模式在绝大多数情况下都可以安全使用。
如果以下任何一项成立,直接模式将被禁用:
· 配置设置 直接模式 是假的
· 一个包含文件的修改时间太新(需要避免竞争
状况)
· 统一器已启用(配置设置 统一 是真的)
· 使用了直接模式不支持的编译器选项:
· 一种 -Wp,X 编译器选项除了 -Wp,-MD,径 和 -Wp,-MMD,径
· -X预处理器
· 字符串“__TIME__”出现在源代码中
这个 预处理器 模式
在预处理器模式下,散列由公共信息和:
· 运行编译器的预处理器输出 -E
· 除了影响包含文件的选项之外的命令行选项(-I, -包括, -D,
等等; 理论是这些选项将改变预处理器输出,如果它们有
任何影响)
· 预处理器生成的任何标准错误输出
基于hash,可以直接在缓存中查找缓存的编译结果。
编译 IN 不同 目录
哈希中包含的某些标识唯一编译的信息可能包含
绝对路径:
· 预处理的源代码可能包含包含文件的绝对路径,如果
编译器选项 -g 使用或如果给定绝对路径 -I 和类似的编译器
选项。
· 编译器选项指定的路径(例如 -I, -MF等)可能是绝对的。
· 源代码文件路径可以是绝对的,该路径可以替换为 __文件__
源代码中的宏或包含在由标准错误发出的警告中
预处理器。
这意味着如果在不同位置编译相同的代码,则无法共享
由于缓存未命中,因此不同构建目录之间的编译结果
因为绝对构建目录路径是哈希的一部分。 为了减轻这种情况
问题,您可以在配置设置中指定一个“基本目录” 基目录 到
目录的绝对路径。 然后 ccache 将重写在
基目录(即以基目录为前缀的路径)到相对路径
在构建哈希时。 用作基本目录的典型路径是您的家
目录或作为构建目录的父目录的另一个目录。 (不要使用 / 作为
基目录,因为这将使 ccache 也重写系统头文件的路径,
这不会得到任何东西。)
使用基目录的缺点是:
· 如果指定源代码文件的绝对路径, __文件__ 宏将是
而是扩展为相对路径。
· 如果指定源代码文件的绝对路径并编译 -g,
存储在目标文件中的源代码路径可能指向错误的目录,这可能
防止像 GDB 这样的调试器找到源代码。 有时,解决方法是
在 GDB 中使用“cd”命令显式更改目录。
预编译 标题
ccache 支持 GCC 的预编译头文件。 然而,你必须做一些事情
使其正常工作:
·你必须设置 s 至 pch_定义,时间宏. 原因是ccache不能
告诉是否 __时间__ or __日期__ 在使用预编译头时使用。 此外,它
由于预处理的工作方式,无法检测源代码中#defines 的变化
结合预编译的头文件。
· 你必须:
· 使用 -包括 包含预编译头文件的编译器选项(即,不要
使用 的#include 在源代码中包含标题); 或者
·(对于 Clang 编译器)使用 -包括-pch 包含 PCH 的编译器选项
从预编译头生成的文件; 或者
·添加 -fpch-预处理 编译时的编译器选项。
如果不这样做,头文件的非预编译版本将是
used(如果可用)或 ccache 将回退到运行真正的编译器并增加
统计计数器“预处理器错误”(如果非预编译头文件不是
可用)。
共享 A CACHE
一组开发者可以通过共享一个缓存目录来提高缓存命中率。 到
共享一个缓存而没有令人不快的副作用,应满足以下条件:
· 使用相同的缓存目录。
· 确保配置设置 硬链接 为假(这是默认值)。
· 确保所有用户都在同一组中。
· 设置配置设置 遮罩 到 002。这确保缓存的文件是
组中的每个人都可以访问。
· 确保所有用户在整个缓存目录中都有写权限(并且
您信任共享缓存的所有用户)。
· 确保在缓存中的所有目录上都设置了 setgid 位。 这告诉
文件系统继承新目录的组所有权。 命令“查找
$CCACHE_DIR - 类型 d | xargs chmod g+s”可能对此有用。
避免硬链接模式的原因是硬链接会导致不必要的副作用,
因为所有指向缓存文件的链接都共享文件的修改时间戳。 这导致
每当另一个用户时,基于时间戳的构建系统都会触发错误的依赖关系
链接到现有文件。 通常,用户会看到他们的库和二进制文件是
无故重新链接。
您可能还想确保正确设置了基本目录,如中所述
上一节。
共享 A CACHE ON NFS的
可以将缓存目录放在 NFS 文件系统(或类似的文件系统)上,
但请记住:
· 在 NFS 上缓存可能会减慢编译速度。 确保做一些基准测试
看看是否值得。
· ccache 尚未在 NFS 上进行非常彻底的测试。
一个提示是设置 临时目录 到本地主机上的目录,以避免 NFS 流量
临时文件。
使用 高速缓存 与 其他 编译器 包装纸
将 ccache 与另一个编译器包装器(例如“distcc”)结合的推荐方式
是通过让 ccache 执行编译器包装器。 这是通过定义
配置设置 前缀命令,例如通过设置环境变量
CCACHE_PREFIX 文件 到包装器的名称(例如 分区)。 ccache 然后将前缀
运行编译器时使用指定命令的命令行。 指定几个
前缀命令,设置 前缀命令 到以冒号分隔的命令列表。
除非你设置 编译器检查 到一个合适的命令(见描述
配置选项),不推荐使用表单 缓存 另一个包装器
编译 ARGS 作为编译命令。 也不建议使用
其他编译器包装器的伪装技术。 原因是默认情况下,
在这两种情况下,ccache 都会散列另一个包装器的 mtime 和大小,而不是真实的
编译器,这意味着:
· 编译器升级将无法正确检测。
· 缓存的结果不会在有和没有其他的编译之间共享
包装。
另一件小事是,如果 前缀命令 使用,ccache 不会调用另一个
运行预处理器时的包装器,从而提高性能。
使用 onworks.net 服务在线使用 ccache
