AM_LDFLAGS和LDFLAGS之间有什么区别

时间:2014-12-26 09:33:13

标签: c makefile flags automake

我想知道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))

2 个答案:

答案 0 :(得分:5)

  

_我想知道AM_LDFLAGS和LDFLAGS _

之间有什么区别

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

根据automake manual page

  

这是Makefile.am作者可用于传递其他链接器标志的变量。在某些情况下,这不会被使用,优先于每个可执行文件(或每个库)_LDFLAGS

但是,根据提供的信息here重新编写错误,它看起来像是变量使用的问题。 Automake希望变量必须设置为某些值才能追加

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

AM_LDFLAGS =     // which "sets" the AM_LDFLAGS

然后再做

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

答案 1 :(得分:1)

如果该错误抱怨它所说的是抱怨(并且我完全不确定它为什么/应该如此)那么我认为解决方案就像添加

一样简单
AM_LDFLAGS =

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

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

  

AM_LDFLAGS

     

这是Makefile.am作者可用于传递其他链接器标志的变量。在某些情况下,这不会被使用,优先于每个可执行文件(或每个库)_LDFLAGS。