Autoreconf 以“非 POSIX 变量名称”停止

Oli*_*ver 3 posix makefile autoreconf

我创建了一个 Makefile.in,我从文件中读取内容并将其传递给 CFLAGS。调用 ./configure ... 将生成 Makefile,一切正常。

Makefile.in: 
... 
MY_REVISION_FILE=my-revision.txt 
MY_REVISION=$(shell cat $(top_srcdir)/$(MY_REVISION_FILE)) 
AM_CFLAGS = -I$(EXTRAS_INCLUDE_DIR) -I$(top_srcdir) -DMY_REVISION=$(MY_REVISION) 
... 
Run Code Online (Sandbox Code Playgroud)

一旦我将 Makefile.in 代码移动到 Makefile.am 以允许自动生成 Makefile.in,问题就会出现。调用 autoreconf -i --force 停止并出现以下错误:

server/Makefile.am:9: cat $(top_srcdir: non-POSIX variable name 
server/Makefile.am:9: (probably a GNU make extension) 
autoreconf: automake failed with exit status: 1 
Run Code Online (Sandbox Code Playgroud)

这个问题在很长一段时间以来一直困扰着我。我到处搜索,但没有找到任何可以帮助我找到解决方案的东西。简而言之,我唯一需要的是一种获取未解释文本的方法,例如从 Makefile.am 复制到 Makefile.in 的“$(shell cat $(top_srcdir)/$(MY_REVISION_FILE))”

任何的想法?

谢谢,奥利弗

Jac*_*lly 5

正如它所说,问题是你在你Makefile.am的 .

要么重写您的代码,使其可移植(您应该使用它,AM_CPPFLAGS因为您将标志传递给预处理器,而不是编译器):

AM_CPPFLAGS = -I$(EXTRAS_INCLUDE_DIR) -I$(top_srcdir) -DMY_REVISION=`cat $(top_srcdir)/$(MY_REVISION_FILE)`
Run Code Online (Sandbox Code Playgroud)

如果您不想cat在每次编译时都调用,则可以在 in 中找到该值configure.ac并将AC_SUBST其放入MakefileAC_DEFINE将其放入config.h.

或者,如果你想成为不可移植的 (?_?),你可以去掉-Werror你的AM_INIT_AUTOMAKEor AUTOMAKE_OPTIONS,或者添加-Wno-portability.