【问题标题】:discover static library dependencies发现静态库依赖
【发布时间】:2011-09-19 02:11:44
【问题描述】:

我知道在使用一些工具(例如 gcc -MD ...)构建目标文件时,我可以发现所需的头文件依赖项

是否有类似的方法来确定链接组件时将使用的静态库?

特别是我正在查看一些具有大量间接性的多级 make 文件,我希望能够获得该构建的依赖项列表,以便我可以简化构建系统的重建请求。

例如:

make foo.mak

foo.mak

OBJS = bar.o \
 bar2.o

DEPS = core\
 msg\
 utils\

EXTRA_FLAGS +=  -Wall -Werror

include ../common/common.mak

在 common.mak 中 DEPS 的成员将以各种方式扩展,具体取决于 opn 这是什么类型的构建。它们可能是静态的、共享的甚至是内核库,并且它们可能会获得前置或后置修复。

我想得到

ABC_core_DEF.a
GEH_msg_IJK.a

(假设 core 和 msg 是扩展为实际静态包含的唯一依赖项,并且前后修复如图所示。)

【问题讨论】:

  • 链接的静态库是指定的。您建议在什么意义上实现自动化? (换句话说,构建系统应该如何先验解决这个问题?)
  • 示例:在顶级 make 文件中,我可以创建一些使用的文件和组件的列表,然后在项目中所有组件通用的较低级别 make 文件中,实际创建各种构建命令,这些因大量因素而异。所以我希望能够注入一个选项来转储每个模块使用的静态库的实际列表,而不是尝试通过这个(非常)长的脚本来破解。
  • @tletnes:请编辑您的问题以包含您希望自动化的具体示例。
  • @karlphillip 我已经接受了一个,对于其他的我没有看到任何好的答案,我也没有看到延续错误答案的意义。
  • 您想知道哪些库链接到一个模块中,或者该模块实际需要哪些库?

标签: c build dependencies


【解决方案1】:

如果您的构建系统支持显示编译命令的模式(例如,某些设置,例如 VERBOSE=1),您可以尝试 grep 此输出以查找类似于 -l 的项目(或您的目标的任何其他类型的链接器选项工具链使用)。

【讨论】:

  • 这可能是唯一的方法,但我希望避免这样的解决方案,特别是因为从事该项目的几个团队使用不同的输出隐藏方法和详细标志。
猜你喜欢
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 2019-07-05
相关资源
最近更新 更多