在Windows上快速Qt C ++编译

我有一个大的项目,使用Qt框架,并试图find最快的方式来编译我的Windows安装。

在我家里的linux机器上,我用了3年前的Linux Mint安装了一个双核(这个机器是3年,而不是Linux Mint安装) ,使用:make -j2这两个核心都使用完整(ish)并且编译代码相对快,从干净的构build大约10分钟。

然而,在我工作的Windows PC 2.0 GHz英特尔®酷睿™2四核(XP)我似乎无法得到编译速度一样快,我的Linux机器。 程序的开发人员文档推荐使用Visual Studio C ++使用cmake生成的项目文件,但似乎只使用一个核心,并花费了一个多小时的时间来编译我的Linux安装上大约10分钟(从干净的版本)。

我已经使用jom,但即使使用所有的内核,它仍然需要大约一个半小时,因为它似乎只使用每个核心less量的CPU。

对我来说没有意义的是,我的旧的Linux机器快速build立,但四核心只是下滑。

以下这些已经帮助我们的Windows C ++ Qt的构建速度,多年来:

  1. 定制我们的反病毒软件的设置,以排除我们的源代码,目标代码,以及我们正在构建的所有头文件和库(Visual Studio,Qt等)的位置。 (有一个单独的AV检查一夜之间运行,扫描这些排除的文件夹)
  2. 在各种不同的AV软件包下比较构建速度。 (这是几年前,但结果,我们从McAfee转移到Sophos)
  3. 确保在构建过程中访问的所有文件都在本地磁盘驱动器上(我们用来在网络驱动器上针对Qt构建,但是这样做会影响构建性能)
  4. 确保Visual Studio被配置为一次执行多个编译步骤: 这个答案显示了多种方式 。
  5. 增加RAM的数量:现在我们发现,4 GB是绝对最小的,相当大的代码库
  6. 从静态链接切换到动态链接,大幅缩短链接时间。
  7. 移动到Visual Studio的新版本,因为MS已经改进了性能:请参阅此Visual Studio 2010页面 ,并搜索“Faster Compilation”

我们的Windows版本比Linux版本还要慢,但我不能说这是一个公平的比较,因为我们的共享Linux构建盒比开发PC要高得多。

(顺便说一句,如果你之前没有见过它,那么值得一读的是Jeff Atwood所说的关于开发人员电脑良好配置的内容:例如程序员的权利法案(Bill of Rights )

更新日期:25/10/2012

如果您使用的是Visual Studio 2008,但是使用DLL构建, 我目前不推荐移植到Visual Studio 2010 :依赖项目的不必要的重新链接存在一个问题,绝对会使开发人员的工作效率降低,至少在.sln中使用20或所以.vcxproj文件:

  • 使用Visual Studio 2010进行构建时,不必要地重新链接依赖项目

有可能是一个解决方案 – 我会稍后更新,一旦我测试了一下 – 看到不必要的重新链接的依赖项目时,建设与Visual Studio 2010 CORCOR说:

如果别人有类似的问题:

关闭DLL项目的表现创建,并只为应用程序项目打开帮助!

与VS2008这似乎没有问题。

这可能是一个解决方法,但我们使用Incredibuild,它分布在多个机器上,这工作得很好。 从40到10分钟,我们的建设时间缩短。 (我们有6个开发人员联系起来分担工作量)

Visual Studio可以并行编译多个项目,但每个项目都是按顺序编译的。 所以如果你用两个项目编译一个解决方案,那么两个进程将并行启动,但是如果你只有一个项目,那么只有一个进程将会启动,它将顺序编译你的源代码。

如果你使用MingW,你可以按照这个线程: http : //www.mail-archive.com/qt-creator@trolltech.com/msg00156.html

在那里您将找到解决方案(安装MSys并在启动make时指定参数-j以指定并行作业的数量)。

更简单的解决方案在这里: http : //developer.qt.nokia.com/forums/viewthread/855/ (在QtCreator工具 – >选项指定Jom作为构建工具,而不是NMake)

我有同样的问题。 在我们的机器上运行的是一个试图确定与Windows 7兼容性的软件。这个软件将软件的每一个启动记录到一个数据库,从而减缓了新进程的启动。 由于编译器为每个文件启动一个新的进程,这显着减慢了整个编译运行。

在Visual Studio中你是否去了:

项目 – >属性 – > C ++并将“多处理器编译”为是? 这对我来说打开了多核,这应该加快其实际上相当多。

我认为最好的办法是把你的项目分解成多个项目,每个项目都是静态库项目,通过一般是MainWindow类的容器项目将它们连接在一起。 因此,编译时间首次需要一段时间,然后将会很短(取决于您的修改)。