英语法语西班牙文

OnWorks 网站图标

ccache-swig2.0 - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 ccache-swig2.0

这是命令 ccache-swig2.0 可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


ccache-swig - 一个快速的编译器缓存

概要


ccache-swig [选项]

ccache-swig [编译器选项]

[编译器选项]

商品描述


ccache-swig 是一个编译器缓存。 它通过缓存加速 C/C++/SWIG 代码的重新编译
先前编译并检测何时再次进行相同的编译。 ccache-swig 是
ccache 加上对 SWIG 的支持。 ccache 和 ccache-swig 在此可互换使用
文档。

配置 概要


以下是 ccache-swig 选项的摘要。

-s 显示统计摘要
-z 零统计
-c 运行缓存清理
-C 彻底清除缓存
-F 设置缓存中的最大文件数
-M 设置缓存的最大大小(使用 G、M 或 K)
-h 这个帮助页面
-V 打印版本号

配置


这些选项仅在您将 ccache 调用为“ccache-swig”时才适用。 当作为
编译器这些选项都不适用。 在这种情况下,您的正常编译器选项适用并且
你应该参考你的编译器文档。

-h 打印选项摘要页

-s 打印缓存的当前统计摘要。 统计数据被存储
分布在缓存的子目录中。 使用“ccache-swig -s”加起来
统计所有子目录并打印总数。

-z 将缓存统计信息归零。

-V 打印 ccache 版本号

-c 清理缓存并重新计算缓存文件计数和大小总数。 通常情况下
-c 选项应该不是必需的,因为 ccache 将缓存保持在指定的以下
在运行时限制并使统计信息在每次编译时保持最新。 这个选项是
如果您手动修改缓存内容或认为缓存
尺寸统计可能不准确。

-C 清除整个缓存,删除所有缓存文件。

-F
这将设置缓存中允许的最大文件数。 值被存储
在缓存目录中并适用于所有未来的编译。 由于方式
存储值 使用的实际值总是四舍五入到最接近的
16 的倍数。

-M
这将设置最大缓存大小。 您可以以千兆字节、兆字节为单位指定一个值
或千字节,通过将 G、M 或 K 附加到值。 默认值为千兆字节。 这
存储的实际值向下舍入到最接近的 16 KB 的倍数。

安装


有两种方法可以使用 ccache。 您可以在编译命令前加上
"ccache-swig" 或者你可以在 ccache-swig 和你的名字之间创建一个符号链接
编译器。 如果您只是想尝试 ccache 或希望,第一种方法是最方便的
将其用于某些特定项目。 第二种方法在您愿意时最有用
使用 ccache 进行所有编译。

要通过第一种方法安装使用,只需将 ccache-swig 复制到路径中的某个位置。

要安装第二种方法,请执行以下操作:

cp ccache-痛饮 / usr /本地/ bin /
ln -s /usr/local/bin/ccache-swig /usr/local/bin/gcc
ln -s /usr/local/bin/ccache-swig /usr/local/bin/g++
ln -s /usr/local/bin/ccache-swig /usr/local/bin/cc
ln -s /usr/local/bin/ccache-swig /usr/local/bin/swig

只要 在/ usr / local / bin目录 出现在 gcc 的路径之前(通常在
/ usr / bin)。 安装后,您可能希望运行“which gcc”以确保正确
正在使用链接。

笔记! 不要使用硬链接,使用符号链接。 硬链接会导致“有趣”
问题。

额外服务 配置


当作为编译器前端运行时,ccache 通常只采用相同的命令行选项
作为您正在使用的编译器。 唯一的例外是选项“--ccache-skip”。
该选项可用于告诉 ccache 下一个选项绝对不是输入
文件名,并应按原样传递给编译器。

这很重要的原因是 ccache 确实需要解析命令行和
确定什么是输入文件名以及什么是编译器选项,因为它需要输入
filename 来确定生成的目标文件的名称(除其他外)。 这
在这个解析中使用的启发式 ccache 是命令行上的任何字符串作为
文件被视为输入文件名(通常是 C 文件)。 通过使用 --ccache-skip 你可以
强制选项不被视为输入文件名,而是传递给
编译器作为命令行选项。

环境 变数


ccache 使用许多环境变量来控制操作。 大多数情况下你
不需要任何这些,因为默认值就可以了。

缓存目录
CCACHE_DIR 环境变量指定 ccache 将其缓存的位置
编译器输出。 默认值为“$HOME/.ccache”。

CCACHE_TEMPDIR
CCACHE_TEMPDIR 环境变量指定 ccache 将临时放置的位置
文件。 默认值与 CCACHE_DIR 相同。 注意 CCACHE_TEMPDIR 路径
必须与 CCACHE_DIR 路径在同一文件系统上,以便重命名文件
两个目录之间都可以工作。

CCACHE_LOGFILE文件
如果你设置了 CCACHE_LOGFILE 环境变量,那么 ccache 会写一些日志
有关该文件中缓存命中和未命中的信息。 这对于跟踪很有用
问题。

CCACHE_VERBOSE
如果您设置了 CCACHE_VERBOSE 环境变量,那么 ccache 将显示在
标准输出它所做的所有编译器调用。 这对调试很有用
意想不到的问题。

缓存路径
您可以选择将 CCACHE_PATH 设置为冒号分隔的路径,ccache 将在该路径中查找
对于真正的编译器。 如果你不这样做,那么 ccache 将寻找第一个
与不是符号链接的普通 PATH 中的编译器名称匹配的可执行文件
ccache 本身。

CCACHE_CC
您可以选择设置 CCACHE_CC 以强制使用编译器的名称。 如果你
不要这样做,然后 ccache 从命令行解决它。

CCACHE_PREFIX 文件
此选项向 ccache 调用时运行的命令行添加前缀
编译器。 另请参阅以下有关将 ccache 与 distcc 一起使用的部分。

CCACHE_DISABLE 关闭
如果你设置了环境变量 CCACHE_DISABLE 那么 ccache 只会调用
真正的编译器,完全绕过缓存。

CCACHE_READONLY
CCACHE_READONLY 环境变量告诉 ccache 尝试使用现有的
缓存目标文件,但不要尝试向缓存添加任何新内容。 如果你是
使用这个是因为你的 CCACHE_DIR 是只读的,那么你可能会发现你也
需要设置 CCACHE_TEMPDIR 否则 ccache 将无法创建临时
文件。

CCACHE_CPP2
如果您设置了环境变量 CCACHE_CPP2,那么 ccache 将不会使用
通过编译避免对预处理器的第二次调用的优化
在缓存的情况下用于查找哈希的预处理输出
错过。 这主要是一个调试选项,尽管某些
不寻常的编译器会在使用的中间文件扩展名方面出现问题
在此优化中,在这种情况下,此选项可以允许使用 ccache。

CCACHE_NOCOMPRESS
如果设置环境变量 CCACHE_NOCOMPRESS 则没有压缩
用于进入缓存的文件。 但是,此设置对如何
从缓存中检索文件,压缩结果仍然可用。

CCACHE_NOSTATS
如果您设置了环境变量 CCACHE_NOSTATS,那么 ccache 将不会更新
每次编译的统计文件。

CCACHE_NLEVELS
环境变量 CCACHE_NLEVELS 允许您选择级别数
缓存目录中的哈希值。 默认为 2。最小值为 1,最大值
是8。

CCACHE_HARDLINK
如果您设置了环境变量 CCACHE_HARDLINK,那么 ccache 将尝试使用
创建编译器输出时缓存目录中的硬链接,而不是
使用文件副本。 使用硬链接更快,但会混淆像“make”这样的程序
依赖于修改时间。 从来没有为压缩缓存创建硬链接
文件。

CCACHE_RECACHE 缓存
这会强制 ccache 不使用任何缓存的结果,即使它找到了它们。 新的
结果仍被缓存,但现有的缓存条目将被忽略。

CCACHE_UMASK
这为 ccache 和所有子进程(例如编译器)设置了 umask。 这个
当您希望与其他用户共享缓存时,这非常有用。 请注意,这
还会影响在从您创建的目标文件上设置的文件权限
汇编。

CCACHE_哈希目录
这告诉 ccache 在计算散列时散列当前工作目录
用于区分两个编译。 这可以防止存储出现问题
目标文件的调试信息中的当前工作目录,这可以导致
ccache 提供在调试中具有工作目录的缓存对象文件
信息设置不正确。 此选项默认关闭,因为设置不正确
此调试信息很少引起问题。 如果您遇到不使用 gdb 的问题
正确的目录然后启用此选项。

CCACHE_UNIFY
如果您设置环境变量 CCACHE_UNIFY 那么 ccache 将使用 C/C++
如果在编译中未使用 -g,则在对预处理器输出进行哈希处理时使用 unifier。 这
unifier 比普通哈希慢,因此设置此环境变量会丢失
有点速度,但这意味着ccache可以利用不重新编译
当对源代码的更改仅包括重新格式化时。 请注意,使用
CCACHE_UNIFY 更改哈希,因此无法使用 CCACHE_UNIFY 设置缓存编译
在未设置 CCACHE_UNIFY 时使用,反之亦然。 统一器关闭的原因是
默认是它可以在编译器警告中给出不正确的行号信息
消息。

CCACHE_扩展
通常 ccache 会尝试自动确定要使用的扩展名
基于正在编译的文件类型的中间 C 预处理器文件。
不幸的是,这有时不起作用,例如在使用 aCC 编译器时
在 HP-UX 上。 在这样的系统上,您可以使用 CCACHE_EXTENSION 选项来覆盖
默认值。 在 HP-UX 上,如果您使用 aCC,请将此环境变量设置为“i”
编译器。

CCACHE_STRIPC 文件
如果你设置了环境变量 CCACHE_STRIPC 那么 ccache 将去掉 -c
调用预处理器时的选项。 此选项主要用于 Sun
Workshop C++ 编译器如果没有此选项,则会显示无根据的警告:
CC:警告:当 -E 和
-c 一起使用。

CCACHE_SWIG 文件
当使用 SWIG 作为编译器并且它的可执行文件名称中没有“swig”时,
然后需要设置 CCACHE_SWIG 环境变量,以便 ccache
与 SWIG 一起正常工作。 由于 SWIG,还建议使用 CCACHE_CPP2
然而,对于一些预处理器的怪癖,通常可以跳过 CCACHE_CPP2 的使用——
在设置和不设置此选项的情况下检查生成的代码。 已知问题是
在 %inline 块中使用预处理器指令并使用“#pragma SWIG”。

CACHE 尺寸 项目管理


默认情况下,ccache 对缓存大小有 XNUMX GB 的限制,并且没有最大数量
文件。 您可以使用“ccache -M”和“ccache -F”选项设置不同的限制,
设置文件的大小和数量限制。

当达到这些限制时,ccache 会将缓存减少到低于您的数字的 20%。
指定以避免过于频繁地执行缓存清理操作。

CACHE 压缩


默认情况下,在大多数平台上,ccache 将使用以下命令压缩它放入缓存中的所有文件
zlib 压缩。 虽然这涉及到可以忽略不计的性能下降,但它
显着增加了适合缓存的文件数量。 你可以关掉
压缩设置 CCACHE_NOCOMPRESS 环境变量。

如何 IT 工作


基本思想是检测何时第二次编译完全相同的代码并
使用之前编译的输出。 您通过形成散列来检测它是相同的代码
作者:

o 使用 -E 运行编译器的预处理器输出

o 命令行选项

o 真正的编译器大小和修改时间

o 编译器生成的任何 stderr 输出

这些使用 md4(强散列)进行散列,并基于该散列形成缓存文件
结果。 当相同的编译完成第二次 ccache 能够提供
来自缓存的正确编译器输出(包括所有警告等)。

ccache 已被仔细编写,以始终生成完全相同的编译器输出
你会得到没有缓存。 如果您发现 ccache 更改了
你的编译器的输出然后请让我知道。

使用 高速缓存 区域中心


distcc 是一个非常有用的程序,用于跨一系列编译器分发编译
服务器。 将 distcc 与 ccache 结合使用通常很有用,以便完成的编译
由 distcc 加速,但 ccache 在可能的情况下完全避免编译。

要将 distcc 与 ccache 一起使用,我建议使用 CCACHE_PREFIX 选项。 你只需要设置
环境变量 CCACHE_PREFIX 到 'distcc' 和 ccache 将前缀命令行
与带有命令“distcc”的编译器一起使用。

共享 A CACHE


一组开发者可以通过共享一个缓存目录来提高缓存命中率。 这
然而,硬链接会导致不必要的副作用,因为所有指向缓存文件的链接都共享
文件的修改时间戳。 这会导致错误的依赖项被触发
每当另一个用户链接到现有文件时,基于时间戳的构建系统。 通常,
用户会看到他们的库和二进制文件无缘无故地重新链接。 分享一个
缓存无副作用,需要满足以下条件:

o 使用相同的 缓存目录 环境变量设置

o 取消设置 CCACHE_HARDLINK 环境变量

o 确保每个人都将 CCACHE_UMASK 环境变量设置为 002,这确保
组中的每个人都可以访问缓存的文件。

o 确保所有用户在整个缓存目录中都有写权限(和
您信任共享缓存的所有用户)。

o 确保在缓存中的所有目录上都设置了 setgid 位。 这告诉
为新目录继承组所有权的文件系统。 命令“chmod
g+s `find $CCACHE_DIR -type d`" 可能对此有用。

o 设置 CCACHE_NOCOMPRESS 对于所有用户,如果有用户使用 ccache 版本
不支持压缩。

历史


ccache 的灵感来自 Erik Thiele 和我编写的 compilercache shell 脚本脚本
感谢他的出色作品。 看
http://www.erikyyy.de/compilercache/ 对于 Erik 的脚本。 ccache-swig 是一个端口
添加了支持与 SWIG 一起使用的原始 ccache。

我写 ccache 是因为我想从编译器缓存中获得更快的速度,我
想要删除 shell-script 版本的一些限制。

差异性 编译缓存


Erik 的 compilercache 脚本和 ccache 最大的区别是:

o ccache 是用 C 编写的,这使它更快一些(调用外部
程序主要是减慢脚本速度的原因)。

o ccache 可以自动找到真正的编译器

o ccache 保存命中/未命中的统计信息

o ccache 可以做自动缓存管理

o ccache 可以缓存包含警告的编译器输出。 在许多情况下,这给
ccache 更高的缓存命中率。

o ccache 可以处理更广泛的编译器选项

o ccache 避免在缓存未命中时两次调用 cpp

鸣谢


感谢以下人员对 ccache 的贡献

o Erik Thiele 用于原始编译器缓存脚本

o Luciano Rocha 提出了编译预处理器输出以避免第二次 cpp 的想法
通过

o Paul Russell 的许多建议和 debian 包装

使用 onworks.net 服务在线使用 ccache-swig2.0


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad