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))”
任何的想法?
谢谢,奥利弗
正如它所说,问题是你在你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其放入Makefile或AC_DEFINE将其放入config.h.
或者,如果你想成为不可移植的 (?_?),你可以去掉-Werror你的AM_INIT_AUTOMAKEor AUTOMAKE_OPTIONS,或者添加-Wno-portability.