我想执行以下操作:如果PATH中存在CCache,请使用"ccache g ++"进行编译,否则使用g ++.我尝试编写一个包含的小型my-cmake脚本
CC="ccache gcc" CXX="ccache g++" cmake $*
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用(运行make仍然不使用ccache;我使用CMAKE_VERBOSE_MAKEFILE检查了这一点).
更新:
根据此链接,我尝试将脚本更改为
cmake -D CMAKE_CXX_COMPILER="ccache" -D CMAKE_CXX_COMPILER_ARG1="g++" -D CMAKE_C_COMPILER="ccache" -D CMAKE_C_COMPILER_ARG1="gcc" $*
Run Code Online (Sandbox Code Playgroud)
但cmake抱怨说使用编译器ccache测试失败(可以预料).
我知道scons实现了它的功能ccache,但我坚持使用另一个构建系统.
我也知道gocachesourceforge上有一个项目旨在ccache为其他编译器实现类似功能,但似乎并不完整.
试图结合ccache和colorgcc.以下链接文字:
运行g ++ --version时接收:
Can't exec "ccache /usr/bin/gcc": No such file or directory at /usr/lib/perl5/5.8.8/IPC/Open3.pm line 246.
open3: exec of ccache /usr/bin/gcc --version failed at /usr/local/bin/colorgcc/gcc line 208
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决?
我必须编译用C++编写的应用程序的多个版本,我认为使用ccache来加速这个过程.
ccache howtos有一些示例建议创建名为gcc,g ++等的符号链接,并确保它们出现在原始gcc二进制文件之前的PATH中,因此使用ccache.
到目前为止一切都那么好,但我只想在编译这个特定的应用程序时使用ccache,而不是总是如此.
当然,我可以编写一个shell脚本,每次我想编译应用程序时都会尝试创建这些符号链接,并在编译应用程序时删除它们.但这看起来像文件系统滥用给我.
是否有更好的方法有选择地使用ccache,而不是总是?
为了编译单个源代码文件,我可以手动调用ccache而不是gcc并完成,但我必须处理一个复杂的应用程序,该应用程序使用自动构建系统来存储多个源代码文件.
我正在努力将C++项目的构建移动到docker镜像中.该图像将由Jenkins工作构建和推送.在docker之前,我大量使用ccache来加速我在Jenkins上的构建,特别是在构建几乎没有变化的情况下.docker的问题在于构建现在在隔离的环境中运行,因此我无法再从ccache中受益.有没有办法在仍然利用ccache的同时构建一个短暂的容器内部?
刚开始使用基于本教程的 ccache ,到目前为止我喜欢它.然而,缓存错过的速度非常慢.这是我的结果:
Regular clean build without ccache : 1m40s
First build with ccache : 4m36s
Second build with ccache : 30s
Run Code Online (Sandbox Code Playgroud)
我不知道从哪里开始调试.性能页面(https://ccache.samba.org/performance.html)提到了make文件的复杂性如何降低编译速度,但在这种情况下我使用Xcode,因此ccache的调用应该相对较快.我期待一些性能下降,但不是这么多!
使用版本3.2.5有我当前的设置:
export CCACHE_MAXSIZE=3G
export CCACHE_HARDLINK=true
export CCACHE_SLOPPINESS=pch_defines,file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches
Run Code Online (Sandbox Code Playgroud)
请注意,如果改变了某些内容,我会使用pch.
自从ccache在我们的CI服务器上使用以来,我们发现在构建时间方面的瓶颈现在是我们的静态分析过程clang-tidy,以及其他工具。有人知道有一种clang-tidy类似于ccache普通编译器的加速方法吗?
我和这个家伙有同样的问题.使用clang和ccache进行编译每次遇到Q_OBJECT时都会收到此警告:
warning: explicitly assigning value of variable of type 'int' to itself [-Wself-assign]
Run Code Online (Sandbox Code Playgroud)
这只发生在使用ccache时,单独使用clang编译相同的代码工作正常.
CCACHE_CPP2=yes
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎并没有解决我的问题,或者说我做错了.
我试过了:
从命令行构建
CCACHE_CPP2=yes ninja
export CCACHE_CPP2=yes
ninja
从Qt Creator CCACHE_CPP2构建,添加到"构建环境"
我还能做些什么来解决这个宏扩展问题吗?我特别不希望全局禁用警告(因为这很糟糕)或本地(因为这意味着将所有宏包装在特定于编译器的样板文件中).
从版本 4.6.1开始,ccache 支持使用 msvc 进行编译。
在我的 Windows 环境中,我安装了 ccache,并可以通过命令行使用它。我尝试通过以下方式将 ccache 集成到我的 cmake 项目中:
根 CMakeLists.txt:
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
message("CCACHE is found")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) # Less useful to do it for linking, see edit2
else(CCACHE_FOUND)
message("CCACHE is NOT found")
endif(CCACHE_FOUND)
Run Code Online (Sandbox Code Playgroud)
这是我在 CMakePresets.json 中的 cmake 配置:
{
"name": ",
"hidden": false,
"generator": "Visual Studio 17 2022",
"toolset": {
"value": "host=x64",
"strategy": "external"
},
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_C_COMPILER": "cl.exe", …Run Code Online (Sandbox Code Playgroud) 关于ccache在GNU/Linux 上启用的文档很少.以下是launchpad.net的回复:
目前,我认为启用ccache的最佳方法是在路径的前面添加"/ usr/lib/ccache".如果要在默认情况下为所有用户启用它,请更改/ etc/environment中的PATH变量.
有人可以给我更多关于启用的信息ccache吗?