我想为一堆可执行文件定义一个包含隐式规则的Makefile,其中一些需要链接到一个自定义构建的库(让我们称之为libedich.a
)。
我的问题是,我希望能够构建那些不需要libedich.a
的可执行文件,而后者尚未构建。如果我只是将-ledich
添加到LDLIBS
变量,则在libedich.a
不存在时会出现错误:
/usr/bin/ld: cannot find -ledich
如果给定的库不存在,我怎么告诉ld可以继续链接?
答案 0 :(得分:3)
一个常见的解决方案是创建一个虚拟档案,以便GCC找到它。由于可执行文件不需要库中的任何符号,因此不会出错。像这样,
# create an empty archive.
ar cru libedich.a
甚至更简单,
echo '!<arch>' >libedich.a
答案 1 :(得分:0)
这是使用一个LDLIBS变量来保存所有库依赖项并为每个目标重用它的缺点,即使您知道某些目标只需要库的子集。您有几种选择:
最后一个选项是我的建议;这是更多的工作,但消除Makefile中的错误依赖将使您能够构建(可能大部分)您的目标,即使其中一个依赖项被破坏。一种方便的方法是使用特定于目标的变量:
targetname::LDLIBS+=-ledich
您可能还想了解make --keep-going
(make -k
)