我使用共享library.so
以避免在仅实现(library.cpp
)而不是接口(library.hpp
)时重新制作可执行文件(与其链接),已经改变了,即
obj/library.o: library.cpp library.hpp
lib/library.so: obj/library.o
program : program.cpp library.hpp
$(CXX) program.cpp -Llib -lrary
因此,program
不依赖library.cpp
或library.so
。但是,从头开始制作(而不是因为某些文件的更改而重新制作)时,library.so
必须在program
之前制作。这可以通过设置:
default: library.so program
但是当使用make -j
时,这已经破了。
那么1)在library.so
之前确保program
但是2)如果只有program
发生了变化则避免重新制作library.cpp
的正确方法是什么?
答案 0 :(得分:1)
您想要的解决方案是仅限订单的先决条件。
从GNU制作手册的Types of Prerequisites部分:
但是,有时您会想要对要调用的规则强加特定排序,而强制在执行其中一条规则时更新目标。在这种情况下,您需要定义仅订单先决条件。可以通过在先决条件列表中放置管道符号(|)来指定仅订单的先决条件:管道符号左侧的任何先决条件都是正常的;右边的任何先决条件都是仅限订单:
targets : normal-prerequisites | order-only-prerequisites