如何使用Eclipse/CDT并行构建项目(不是并行编译!)

11
我有几个项目都依赖于一个基础库。现在,当我更改基础库中的头文件时,我必须重新构建所有相关项目。目前,Eclipse/CDT一个接一个地构建每个项目。如何才能并行构建所有这些项目呢?
请注意,我已经为每个项目使用了-j(并行编译)选项,但这还不够,因为:
1. 有很多可用的 CPU(对于大多数项目而言,超过源文件数量)。 2. 由于并行编译,链接时间比编译时间长得多(据我所知),不能使用多线程。

5
这是一个完美的借口,为什么要改变呢? ;) - Xeo
你的库所依赖的所有项目是否都可以成为一个虚拟项目的依赖项,然后这个虚拟项目可以并行构建?或者我在这里理解有误? - vpit3833
@Xeo:等不了了! - Danvil
@vpit3833:关键是,当Eclipse编译和链接项目1完成后,才会编译项目2,然后是项目3... 当它正在编译时,我的负载约为40%(多亏了-j,但仍然不到100%,因为通常没有足够的源文件来使所有核心保持繁忙状态),而在链接时则为5%的负载(15个空闲核心...)。因此,总体负载约为15%。但是我的天真想法希望它以100%的负载速度快6倍:D - Danvil
你一定要在eclipse中编译吗?也许如果你从命令行编译基本库,然后可以使用基本库对象(一些makefile魔法?)轻松启动多个线程。 - onaclov2000
2个回答

2
我认为当前版本的Eclipse CDT不能并行构建项目,但是您可以通过拥有一个Eclipse CDT Makefile项目来实现相同的效果,该项目构建多个二进制文件(库和可执行文件)。
生成这样的项目的简单方法是使用CMakeEclipse CDT4 - Unix Makefiles生成器。然后,如果在项目属性中指定/usr/bin/make -j<n>作为构建命令,其中n是并行作业的数量,它将并行构建您的目标(不仅是源文件)。

2
我们从使用Eclipse管理的构建转移到使用CMake作为生成器,然后从Makefile转移到Ninja - 这两个决策都显著提高了构建时间。 - kwesolowski

2
项目属性 > C++ 构建 > 行为 > 启用并行构建

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接