【问题标题】:what is the difference between AM_LDFLAGS and LDFLAGSAM_LDFLAGS 和 LDFLAGS 有什么区别
【发布时间】:2015-02-23 15:45:26
【问题描述】:

我想知道 AM_LDFLAGS 和 LDFLAGS 有什么区别,因为我遇到了一个错误

error: AM_LDFLAGS must be set with '=' before using '+='

当我在 foreach 循环中使用 AM_LDFLAGS 时 我的make文件代码如下:

program_INCLUDE_DIRS := /usr/bin/PR__bin

program_LIBRARY_DIRS := /usr/lib/PR__lib

CFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir))

AM_LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))

【问题讨论】:

  • Gnu 文档说:“AM_LDFLAGS 这是 Makefile.am 作者可以用来传递其他链接器标志的变量。在某些情况下,它不使用,而不是 per-可执行(或每个库)_LDFLAGS"。但它没有说明哪些种情况。
  • @WeatherVane 正在更新相同的内容。你秒杀我。 :-)
  • 不同之处在于LDFLAGS 可能被Autoconf 设置或置空,但AM_LDFLAGS 是Automake-only 变量,所以如果你没有明确地给它任何值,它是未设置的...因此错误。

标签: c makefile flags automake


【解决方案1】:

_我想知道AM_LDFLAGS和LDFLAGS有什么区别_

LDFLAGS是继承自Autoconf的变量,AM_LDFLAGS是automake定义的变量。

根据 automake manual page

这是Makefile.am 作者可以用来传递附加链接器标志的变量。在某些情况下,它不使用,而不是每个可执行文件(或每个库)_LDFLAGS

但是,根据here 提供的信息,重新分析错误,看起来变量的使用存在问题。 Automake 期望变量必须设置为 some 值,然后才能附加

解决此问题的正确方法与 Etan Reisner 提供的other answer 中提到的方法相同,只需在循环之前设置 AM_LDFLAGS,类似于

AM_LDFLAGS =     // which "sets" the AM_LDFLAGS

然后做

AM_LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))

【讨论】:

  • @juanchopanza 好吧,因为 bug OP 可能有其他想法。我认为这会有所帮助。
  • @SouravGhosh,我会升级 automake 并反馈给你,但是我的 makefile 有什么问题吗,因为我在 foreach 循环中使用了 AM_LDFLAGS,请问我应该使用 AM_CFLAGS 而不是 CFLAGS 吗?
  • 哦,该错误似乎是该项目中已修复的错误......大概也在该项目中。大概是在使用+= 之前用= 分配给AM_LDFLAGS,这应该像在foreach 之前添加AM_LDFLAGS= 行一样简单。
  • 这根本不是 Automake 的错误;这是您在 Google 上发现的某个随机项目中的错误。这并没有回答问题,而且我对它获得的票数比正确答案多这么多感到困惑。
  • @underscore_d 确实,您说得非常正确。我从来没有重新审视过答案,现在一旦你被指出,看起来这是一个错误的答案,让我编辑以使其正确。再次感谢您留下评论,不胜感激。
【解决方案2】:

如果该错误是在抱怨它所抱怨的内容(而且我完全不确定为什么会/应该是这样),那么我认为解决方案就像添加一样简单

AM_LDFLAGS =

作为使用 += 的 foreach 循环上方的行。

来自 GNU Automake 手册的8.7 Variables used when building a program 部分:

AM_LDFLAGS

这是 Makefile.am 作者可以用来传递附加链接器标志的变量。在某些情况下,它不使用,而不是每个可执行文件(或每个库)_LDFLAGS。

【讨论】:

  • 鉴于该消息,不,默认情况下它似乎没有任何价值(或者默认值在您的初始分配中无用或可包含但我不知道)。但是,我仍然不知道为什么自动工具首先会抱怨这一点。
  • 是的,这个答案解决了“error: AM_LDFLAGS must be set with '=' before using '+='”的错误
  • 但这不会覆盖初始值,因为我的意思是标准 c 库。 ?
  • 不要设置它,看看AM_LDFLAGS在构造的makefile中有什么值。我打赌它没有任何价值。
  • @Sara AM_LDFLAGS 不应该有任何“初始值”,因为它的全部目的是仅由Makefile.am 的作者设置。重点是作者需要指定初始值。
猜你喜欢
  • 2012-02-14
  • 1970-01-01
  • 2019-11-19
  • 2010-10-02
  • 2011-12-12
  • 2010-09-16
  • 2012-03-14
  • 2012-02-06
  • 2011-02-25
相关资源
最近更新 更多