2019独角兽企业重金招聘Python工程师标准>>>

项目越来越大,每次需要重新编译整个项目都是一件很浪费时间的事情。Research了一下,找到以下可以帮助提高速度的方法,总结一下。

  tmpfs

  有人说在Windows下用了RAMDisk把一个项目编译时间从4.5小时减少到了5分钟,也许这个数字是有点夸张了,不过粗想想,把文件放到内存上做编译应该是比在磁盘上快多了吧,尤其如果编译器需要生成很多临时文件的话。

  这个做法的实现成本最低,在Linux中,直接mount一个tmpfs就可以了。而且对所编译的工程没有任何要求,也不用改动编译环境。

  mount -t tmpfs tmpfs ~/build -o size=1G

  用2.6.32.2的Linux Kernel来测试一下编译速度:

  用物理磁盘:40分16秒

  用tmpfs:39分56秒

  呃……没什么变化。看来编译慢很大程度上瓶颈并不在IO上面。但对于一个实际项目来说,编译过程中可能还会有打包等IO密集的操作,所以只要可能,用tmpfs是有益无害的。当然对于大项目来说,你需要有足够的内存才能负担得起这个tmpfs的开销。

  make -j

  既然IO不是瓶颈,那CPU就应该是一个影响编译速度的重要因素了。

  用make -j带一个参数,可以把项目在进行并行编译,比如在一台双核的机器上,完全可以用make -j4,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源。

  还是用Kernel来测试:

  用make: 40分16秒

  用make -j4:23分16秒

  用make -j8:22分59秒

  由此看来,在多核CPU上,适当的进行并行编译还是可以明显提高编译速度的。但并行的任务不宜太多,一般是以CPU的核心数目的两倍为宜。

  不过这个方案不是完全没有cost的,如果项目的Makefile不规范,没有正确的设置好依赖关系,并行编译的结果就是编译不能正常进行。如果依赖关系设置过于保守,则可能本身编译的可并行度就下降了,也不能取得最佳的效果。

  ccache

  ccache用于把编译的中间结果进行缓存,以便在再次编译的时候可以节省时间。这对于玩Kernel来说实在是再好不过了,因为经常需要修改一些Kernel的代码,然后再重新编译,而这两次编译大部分东西可能都没有发生变化。对于平时开发项目来说,也是一样。为什么不是直接用make所支持的增量编译呢?还是因为现实中,因为Makefile的不规范,很可能这种“聪明”的方案根本不能正常工作,只有每次make clean再make才行。

  安装完ccache后,可以在/usr/local/bin下建立gcc,g++,c++,cc的symbolic link,链到/usr/bin/ccache上。总之确认系统在调用gcc等命令时会调用到ccache就可以了(通常情况下/usr/local /bin会在PATH中排在/usr/bin前面)。

  继续测试:

  用ccache的第一次编译(make -j4):23分38秒

  用ccache的第二次编译(make -j4):8分48秒

  用ccache的第三次编译(修改若干配置,make -j4):23分48秒

  看来修改配置(我改了CPU类型...)对ccache的影响是很大的,因为基本头文件发生变化后,就导致所有缓存数据都无效了,必须重头来做。但如果只是修改一些.c文件的代码,ccache的效果还是相当明显的。而且使用ccache对项目没有特别的依赖,布署成本很低,这在日常工作中很实用。

  可以用ccache -s来查看cache的使用和命中情况:

  cache directory                     /home/lifanxi/.ccachecache hit                           7165cache miss                         14283called for link                       71not a C/C++ file                     120no input file                       3045files in cache                     28566cache size                          81.7

转载于:https://my.oschina.net/u/1440501/blog/294359

Linux程序编译速度提高方法相关推荐

  1. 【转】Linux程序编译速度提高方法

    项目越来越大,每次需要重新编译整个项目都是一件很浪费时间的事情.Research了一下,找到以下可以帮助提高速度的方法,总结一下. tmpfs 有人说在Windows下用了RAMDisk把一个项目编译 ...

  2. linux安装软件很慢么,提高Fedora Linux应用程序安装速度的方法

    Fedora是一个功能强大的Linux发行版,但它有一个严重的缺点:DNF包管理器,与Ubuntu和Debian的Apt,Arch的Pacman,甚至是OpenSUSE的Zypper相比比较慢.本文介 ...

  3. make太慢了,加快编译速度的方法 make -j

    make太慢了,加快编译速度的方法 make -j 2018-01-18 09:04:05 gonghuihuihui 阅读数 21957  收藏 更多 分类专栏: linux 版权声明:本文为博主原 ...

  4. Next.js 7.0正式发布:重新编译速度提高42%,支持WebAssembly

    在经过26次金丝雀发布和340万次下载之后,现在,我们正式推出生产就绪的Next.js 7. \\ DX改进:启动速度提高57%,重新编译速度提高42%:\\t 使用react-error-overl ...

  5. VS2013 加快编译速度 的方法整理

    VS2013 加快编译速度 的方法整理 1.更改项目设置 项目|属性|C/C++|代码生成|启用最小重新生成:Yes(/Gm) 项目|属性|C/C++|常规|调试信息格式:程序数据库(/Zi) 项目| ...

  6. Linux程序编译的过程

    Linux程序编译的过程 编译过程 分析ELF文件 Linux 基本命令 编译过程 c,c++代表的高层语言编写的程序在转化成为处理器可以识别并且执行的二级制代码的过程 预处理Preprocessin ...

  7. 提高编译速度的方法——ccache的使用

    在使用CMake编译大型工程时.如果每次只是单独对一个文件进行修改还好,CMake可以针对修改单独编译,但往往只要对CMakeLists做一点小修改,整个工程就要重新编译,对于普通性能的电脑来说通常非 ...

  8. 跑linux编译什么CPU速度快,linux 加快编译速度

    <操作系统>课程设计报告课程设计题目:操作系统课程设计 设计时间:2016/1/10一. 课程设计目的与要求需要完成的内容:(1) 安装虚拟机:Vmware.Vmware palyer ( ...

  9. C++加快编译速度的方法

    C++的主要优点是高性能, 但是说起编译速度,却只有低调的份了.如果不加以重视,编译速度极有可能会成为开发过程中的一个瓶颈.那么,为什么C++它就编译的这么慢呢? 我想最重要的一个原因应该是C++基本 ...

最新文章

  1. 【博客搬家旧文】leetcode 771. Jewels and Stones
  2. 如果没有就插入,如果有就更新
  3. visual studio2008 OpenGL开发配置
  4. 郑州it java_郑州Java网站开发
  5. Windows 8 C++/CX字符串
  6. linux vim命令及使用,极大提升使用linux的舒适程度
  7. Ubuntu之查看依赖软件
  8. 雷凌3070无线网卡linux驱动,3070无线网卡驱动,小编教你ralink3070无线网卡驱动
  9. coreldraw快速撤回_CDR X8撤销、重做与重复操作方法介绍
  10. 记录一次keil调试过程:自动识别GPS厂家芯片
  11. 梦幻西游修炼金钱计算器
  12. [BIM]BIM中IFD介绍
  13. World Locking Tools for Unity (五)安装部分
  14. 稳压二极管、肖特基二极管、静电保护二极管、TVS管
  15. 乒乓球单循环赛_【乒乓球比赛单循环表资讯】乒乓球比赛单循环表足球知识与常识 - 足球百科 - 599比分...
  16. Google最新VR(sdk的诞生)
  17. Linux 修改用户名
  18. eclipse3.6 太阳神版 中文汉化插件
  19. 2022开年书单:7本程序员专业书籍与您相约
  20. 小学生 C++画图 Go C 编程 第7课 奇异的花朵

热门文章

  1. 【LeetCode】【数组归并】Merge k Sorted Lists
  2. Xamarin.Forms教程Android SDK工具下载安装
  3. maven package 知识(转载)
  4. 字符流与字节流转换输出
  5. sharepoint2013保存当前输入的列表
  6. linux几个常用的环境变量配置文件
  7. 相当于零负担的延时程序(转)
  8. 百度运营专家:互联网运营必读书目(实用推荐)
  9. 【pmcaff专栏】一个“Uber”血染中国共享经济
  10. Docker(二)安装及常用命令