0

如何在多处理器机器上加速/优化 Linux 上大型项目的编译,以便利用所有处理器并行完成编译。

任何有关特殊标志、调整的建议都会有所帮助。

问候,-J

4

5 回答 5

2

如果你真的有一个庞大的项目,比如几百万行 C++ 和几千个 CPU,你可能想看看 Google 如何解决它的构建问题。

于 2012-05-16T05:35:51.790 回答
1

您应该设置依赖规则并告诉编译器发出它们(-MD -MP for gcc),例如:

YOUR_DEP    :=$(patsubst %.o,%.d,$(YOUR_OBJ))
-include $(YOUR_DEP)
...

%_c.o: %.c Makefile
@echo [GCC ] $<
@$(CC) $(CFLAGS) -MD -MP $< -o $@
%_cpp.o: %.cpp Makefile
@echo [CXX ] $<
@$(CXX) $(CXXFLAGS) -MD -MP $< -o $@

这样make可以进行依赖检查。但是,并行 make -j 有时会给具有多级依赖的大型项目带来麻烦。

于 2012-05-16T06:27:49.273 回答
1

这取决于您使用的构建系统。如果它是 GNU make,只需添加-j(或--jobs)应该并行化构建。它可能适用于大型项目,也可能不适用,具体取决于 makefile 的表现如何。

另请参阅手册

于 2012-05-15T21:39:22.010 回答
1
make -j <NUM_CPUS>

(见make(1)。)

于 2012-05-15T21:34:15.500 回答
0

您可以使用 distcc 工具从预定义的机器池中编译不同 Linux 机器上的不同源文件。显然make命令行中的“-j”必须使用。此外,您应该尽量避免递归 Makefile,即从 Makefile 调用“make -C $sub_dir”递归 - 这会减慢大型项目的制作过程。

于 2012-05-24T17:09:09.217 回答