2011-10-22 53 views
1

我想为一堆可执行文件定义一个带有隐式规则的Makefile,其中一些需要链接到一个定制库(我们称之为libedich.a)。如何告诉ld忽略缺少的库?

我的问题是,我希望能够构建那些不需要libedich.a的可执行文件,而后者尚未构建。如果我只需添加-ledichLDLIBS变量,当libedich.a不存在我得到的错误:

/usr/bin/ld: cannot find -ledich 

我如何告诉LD这没关系,继续当一个给定的库不存在关联?

+3

你不知道。您将学习使用自动工具根据可用资源生成makefile。 – bmargulies

回答

0

这是使用一个LDLIBS变量来保存所有库依赖关系并为每个目标重新使用它的缺点,即使您知道某些目标只需要库的一个子集。您有几种选择:

  • 有可能看中的IDE和构建工具,在那里,然后根据上下文推断出库的依赖,从手工指定它们为每个目标节省您。
  • 切换到使用共享库。
  • 将目标修复到您的Makefile中,以便它依赖于libedich.a(即使它不需要)。如果你正在创建一切,并且不关心目标进行的顺序,这将起作用。
  • 手动指定Makefile中每个目标的库依赖关系。

最后一个选项是我的建议;这是更多的工作,但消除Makefile中的错误依赖关系将使您可以构建(也许是大部分)目标,即使其中一个依赖关系被破坏。一个方便的方式做,这是特定目标变量:

targetname::LDLIBS+=-ledich 

你可能也想知道make --keep-goingmake -k

3

常见的解决方案是创建一个虚拟的档案,这样GCC会发现它。由于可执行文件不需要库中的任何符号,因此不会出错。与此类似,

# create an empty archive. 
ar cru libedich.a 

或者更简单,

echo '!<arch>' >libedich.a