在制作多线程时如何表达对共享库的依赖性

时间:2015-06-26 10:38:54

标签: makefile shared-libraries

我使用共享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.cpplibrary.so。但是,从头开始制作(而不是因为某些文件的更改而重新制作)时,library.so必须在program之前制作。这可以通过设置:

来确保
default:    library.so program

但是当使用make -j时,这已经破了。

那么1)在library.so之前确保program但是2)如果只有program发生了变化则避免重新制作library.cpp的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您想要的解决方案是仅限订单的先决条件。

从GNU制作手册的Types of Prerequisites部分:

  

但是,有时您会想要对要调用的规则强加特定排序,而强制在执行其中一条规则时更新目标。在这种情况下,您需要定义仅订单先决条件。可以通过在先决条件列表中放置管道符号(|)来指定仅订单的先决条件:管道符号左侧的任何先决条件都是正常的;右边的任何先决条件都是仅限订单:

targets : normal-prerequisites | order-only-prerequisites