在构建具有递归依赖性的库时,我有这个片段:
$(LIBRARY) : $(OBJECTS) | $(LIBDIR) # objects is all the obj/*.o
$(AR) ...
obj/%.o : %.cpp obj/%.d
$(CC) ...
build : $(DEPENDENCIES) $(LIBRARY)
$(DEPENDENCIES):
$(MAKE) -C $(ROOT)/$@
Run Code Online (Sandbox Code Playgroud)
如果我跑,这是有效的make.一切按照正确的顺序按预期构建.但是如果我运行make -jN,那么库会以错误的顺序构建,因为我实际上没有设置任何依赖性排序规则,这会导致许多未定义的引用.
如果我添加规则:
$(OBJECTS) : $(DEPENDENCIES)
Run Code Online (Sandbox Code Playgroud)
然后运行make每次重建每个库,无论更改(DEPENDENCIES是假的,但我不明白为什么它实际上重建了一切).如何在不必每次重建所有内容的情况下为并行构建强制执行正确的排序?