我想为一堆可执行文件定义一个带有隐式规则的Makefile,其中一些需要链接到一个定制库(我们称之为libedich.a
)。如何告诉ld忽略缺少的库?
我的问题是,我希望能够构建那些不需要libedich.a
的可执行文件,而后者尚未构建。如果我只需添加-ledich
到LDLIBS
变量,当libedich.a
不存在我得到的错误:
/usr/bin/ld: cannot find -ledich
我如何告诉LD这没关系,继续当一个给定的库不存在关联?
我想为一堆可执行文件定义一个带有隐式规则的Makefile,其中一些需要链接到一个定制库(我们称之为libedich.a
)。如何告诉ld忽略缺少的库?
我的问题是,我希望能够构建那些不需要libedich.a
的可执行文件,而后者尚未构建。如果我只需添加-ledich
到LDLIBS
变量,当libedich.a
不存在我得到的错误:
/usr/bin/ld: cannot find -ledich
我如何告诉LD这没关系,继续当一个给定的库不存在关联?
这是使用一个LDLIBS变量来保存所有库依赖关系并为每个目标重新使用它的缺点,即使您知道某些目标只需要库的一个子集。您有几种选择:
最后一个选项是我的建议;这是更多的工作,但消除Makefile中的错误依赖关系将使您可以构建(也许是大部分)目标,即使其中一个依赖关系被破坏。一个方便的方式做,这是特定目标变量:
targetname::LDLIBS+=-ledich
你可能也想知道make --keep-going
(make -k
)
常见的解决方案是创建一个虚拟的档案,这样GCC会发现它。由于可执行文件不需要库中的任何符号,因此不会出错。与此类似,
# create an empty archive.
ar cru libedich.a
或者更简单,
echo '!<arch>' >libedich.a
你不知道。您将学习使用自动工具根据可用资源生成makefile。 – bmargulies