AM_LDFLAGS和LDFLAGS之间有什么区别

Sar*_*ra 3 c flags automake makefile

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

error: AM_LDFLAGS must be set with '=' before using '+='
Run Code Online (Sandbox Code Playgroud)

当我在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))
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

_我想知道AM_LDFLAGS和LDFLAGS_之间有什么区别

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

根据automake 手册页,

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

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

正确的方法来解决,这将是一样的,在提到的另一个答案由伊坦赖斯纳提供,只需设置AM_LDFLAGS明确的循环之前,像

AM_LDFLAGS =     // which "sets" the AM_LDFLAGS
Run Code Online (Sandbox Code Playgroud)

然后呢

AM_LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))
Run Code Online (Sandbox Code Playgroud)

  • 哦,那个错误似乎是那个被修复的项目的错误......大概也是在那个项目中.假设在使用`+ =`之前使用`=`赋值给'AM_LDFLAGS`,这应该像在foreach之前添加`AM_LDFLAGS =`行一样简单. (2认同)