如何在多处理器机器上加速/优化Linux上庞大项目的编译,以便利用所有处理器并行完成编译。
有关特殊标志的任何建议,调整都会有所帮助。
的问候,-J
答案 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过程。