【发布时间】:2010-01-05 19:52:01
【问题描述】:
我使用 CMake 创建一个 makefile。 CMake 创建包含绝对路径的 GCC 行。
为了加快编译速度,我使用了 ccache。
从不同位置构建相同的代码(例如,多个开发人员编译相同的代码,每个代码都在其主目录下)会导致 ccache 缓存未命中。
【问题讨论】:
-
绝对路径是否会影响 GCC 开关或使其进入后处理源?
ccache通常只考虑开关和散列后处理源;绝对路径应该无关紧要。 (CCACHE_UNIFY是一个例外。) -
-I/home/nicolas/src/foo/lib是一个有效的 gcc 开关,如果在您的目录中使用-I/home/ephemient/src/foo/lib进行另一个相同的编译,则会导致缓存未命中;它与我的编译创建的缓存条目不匹配。我相信这就是他的意思。 -
不,
ccache明确忽略了-I和其他应该只影响预处理器的病态标志,所以常见的情况(这样)很好。 -
嗯...我认为如果有 -I 切换绝对路径,则预处理输出将在#line 指令中具有这些完整路径。使 ccache 忽略会导致编译器警告引用其他开发人员目录中的路径...
-
嗯,我没有想到——确实,当实际找到文件时,输出会有所不同。好吧,也许
CCACHE_UNIFY模式会有所帮助,因为它试图忽略这样的微不足道的差异,但有时会导致输出显示错误的路径。