多个程序的自动链接
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
。这对我有帮助。谢谢以上是关于多个程序的自动链接的主要内容,如果未能解决你的问题,请参考以下文章