对不同目录中的同一文件进行 ccache link
have ccache link against the same file in different directories
我正在使用 ccache
和 git-worktree
。许多相同的文件在多个目录中共享。问题是 ccache
不检查文件是否相同,并再次编译。是否有 ccache
选项允许它跨多个源目录检查缓存?
ccache(自 3.3 版起默认)如果使用 -g
,则将当前工作目录添加到散列中,这只能在同一源目录中获得缓存命中。另一个类似的问题是,如果您在编译器参数中使用绝对路径,则需要使用 base_dir
配置设置。
来自 "Compiling in different directories" section in the ccache manual 的更多详细信息:
如果您使用 -g(或类似)构建以将调试信息添加到目标文件,您必须:
- 使用
-fdebug-prefix-map=old=new
选项将调试信息重新定位到一个公共前缀(例如 -fdebug-prefix-map=$PWD=.
);或者
- 设置
hash_dir = false
.
如果您在命令行的任何位置使用绝对路径(例如源代码文件路径或编译器选项的参数,如 -I
和 -MF
),您必须将 base_dir
设置为“基本目录”的绝对路径。然后 ccache 会在计算哈希之前将该目录下的绝对路径重写为相对路径。
我正在使用 ccache
和 git-worktree
。许多相同的文件在多个目录中共享。问题是 ccache
不检查文件是否相同,并再次编译。是否有 ccache
选项允许它跨多个源目录检查缓存?
ccache(自 3.3 版起默认)如果使用 -g
,则将当前工作目录添加到散列中,这只能在同一源目录中获得缓存命中。另一个类似的问题是,如果您在编译器参数中使用绝对路径,则需要使用 base_dir
配置设置。
来自 "Compiling in different directories" section in the ccache manual 的更多详细信息:
如果您使用 -g(或类似)构建以将调试信息添加到目标文件,您必须:
- 使用
-fdebug-prefix-map=old=new
选项将调试信息重新定位到一个公共前缀(例如-fdebug-prefix-map=$PWD=.
);或者 - 设置
hash_dir = false
.
- 使用
如果您在命令行的任何位置使用绝对路径(例如源代码文件路径或编译器选项的参数,如
-I
和-MF
),您必须将base_dir
设置为“基本目录”的绝对路径。然后 ccache 会在计算哈希之前将该目录下的绝对路径重写为相对路径。