【问题标题】: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,这将起作用,如果我这样做 - 它会覆盖,对吗?

标签: build automake


【解决方案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。这对我有帮助。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
相关资源
最近更新 更多