多个程序的自动链接

Posted

技术标签:

【中文标题】多个程序的自动链接【英文标题】:Automake linking for multiple PROGRAMS 【发布时间】:2016-05-02 14:13:00 【问题描述】:

我正在使用 Autotools 构建包含多个二进制文件的项目(带有命令行工具的 repo)。

如何将某些库链接到所有程序,而将其他库仅链接到特定程序?

示例: 我的 Makefile.am:

bin_PROGRAMS= prog1 prog2
prog1_SOURCES=prog1.cpp
prog2_SOURCES=prog2.cpp

prog1_LDADD= -llib-only-for-prog1

LDADD=-llib-for-all-projects      # this does not work
#AM_LDFLAGS=-llib-for-all-projects      # this does not work either
#LINK=-llib-for-all-projects      # this does not work either

我希望prog1-llib-only-for-prog1-llib-for-all-projects 相关联,而prog2 - 仅针对-llib-for-all-projects

如何使用 autotools 实现这一目标?

【问题讨论】:

您可能还会发现:AM_DEFAULT_SOURCE_EXT = .cpp 在这里很有用。 @BrettHale 谢谢。我的仓库中有很多程序,但只有一些程序使用的资源多于一个。我知道,如果我不指定 <name>_SOURCES,这将起作用,如果我这样做 - 它会覆盖,对吗? 【参考方案1】:

基本上,如果您为特定程序 (prog1_LDADD) 添加 LDADD,它将忽略常见的 LDADD 选项。

以下对我有用:

bin_PROGRAMS=prog1 prog2 prog3
prog1_SOURCES=prog1.c
prog2_SOURCES=prog2.c
prog3_SOURCES=prog3.c

LDADD=-llib-for-all-projects
prog1_LDADD=-llib-only-for-prog1 $(LDADD)

注意prog1_LDADD行中额外的$(LDADD)。

【讨论】:

好的。我不知道prog1_LDADD 会覆盖LDADD。这对我有帮助。谢谢

以上是关于多个程序的自动链接的主要内容,如果未能解决你的问题,请参考以下文章

自动打开我的应用程序的链接?

链接多个上下文提供程序在反应本机的同一领域工作

通过 REST API 创建 Firebase 控制台动态链接

通过符号链接访问多个文件

将多个 Select2 链接在一起

多个静态链接 dll 的 DLL 重定向