如何在linux中优化构建

时间:2012-05-15 21:31:52

标签: c++ linux gcc compilation multiprocessing

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

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

的问候,-J

5 个答案:

答案 0 :(得分:2)

如果你真的有一个巨大的项目,比如几百万行C ++,以及几千个CPU,你可能想看看Google solves如何{ {3}}问题。

答案 1 :(得分:1)

make -j <NUM_CPUS>

(见make(1)。)

答案 2 :(得分:1)

这取决于您使用的构建系统。如果它是GNU make,只需添加-j(或--jobs)即可并行构建。它可能适用于巨大的项目,也可能不适用,具体取决于makefile的运行状况。

另见the manual

答案 3 :(得分: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有时会给具有多级依赖性的大型项目带来麻烦。

答案 4 :(得分:0)

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