如何在多处理器机器上加速/优化 Linux 上大型项目的编译,以便利用所有处理器并行完成编译。
任何有关特殊标志、调整的建议都会有所帮助。
问候,-J
如何在多处理器机器上加速/优化 Linux 上大型项目的编译,以便利用所有处理器并行完成编译。
任何有关特殊标志、调整的建议都会有所帮助。
问候,-J
您应该设置依赖规则并告诉编译器发出它们(-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 有时会给具有多级依赖的大型项目带来麻烦。
这取决于您使用的构建系统。如果它是 GNU make
,只需添加-j
(或--jobs
)应该并行化构建。它可能适用于大型项目,也可能不适用,具体取决于 makefile 的表现如何。
另请参阅手册。
make -j <NUM_CPUS>
(见make(1)
。)
您可以使用 distcc 工具从预定义的机器池中编译不同 Linux 机器上的不同源文件。显然make命令行中的“-j”必须使用。此外,您应该尽量避免递归 Makefile,即从 Makefile 调用“make -C $sub_dir”递归 - 这会减慢大型项目的制作过程。