【发布时间】:2020-02-18 07:09:49
【问题描述】:
我想创建一个库,在创建时跳过其中一个不包含的依赖文件。
例如:-
liba.so: a.o b.o c.o test.psm
<command for creating liba.so, which includes all its dependencies.>
在这里,当它的任何依赖项发生变化时,我必须创建liba.so 文件。但是.so 文件应该只包含 .o 文件而不是 test.psm 文件。
当我们尝试用非目标文件创建.so文件时会抛出错误。
请帮助我如何使用 GNUmake 实现这一目标。
【问题讨论】:
-
有几种方法可以做到,但首先,您应该为自己回答一个初步问题:如果
test.psm不打算进入图书馆,那么为什么它是图书馆?因为最好和最惯用的方法可能是通过从先决条件列表中删除test.psm来回避这个问题。 -
test.psm 文件是一种 xml 格式,我们将在其中更新已知错误和警告。每次如果我们在该文件中添加任何新内容,我们都想构建库。
-
如果对象没有改变,从它的组成对象文件重建库是没有意义的。如果源代码和编译选项都没有改变,那么从源代码重建对象是没有意义的。另一方面,给定一个正确表示所有目标的真正先决条件并提供适当构建配方的 makefile,
make将自动重新构建需要构建的所有内容以响应任何更改。所以我仍然没有看到任何充分的理由让test.psm成为liba.so的先决条件。 -
好的,但我仍然想知道如何在构建 .so 时跳过先决条件之一。
-
哪个是“错误”?我看不出会出什么问题。要创建依赖项的动态列表,只需使用变量
liba.so: $(LIBA_DEPS),尽管这会使您的 makefile 更难理解。