3

我创建了一个 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) 
... 

一旦我将 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 

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

任何的想法?

谢谢,奥利弗

4

2 回答 2

5

正如它所说,问题是你在你的 GNUism 中使用Makefile.am它,而它只是为了包含可移植的 Makefile 代码。

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

AM_CPPFLAGS = -I$(EXTRAS_INCLUDE_DIR) -I$(top_srcdir) -DMY_REVISION=`cat $(top_srcdir)/$(MY_REVISION_FILE)`

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

或者,如果您想成为非便携式(ಠ_ಠ),您可以-Werror取出您的AM_INIT_AUTOMAKEor AUTOMAKE_OPTIONS,或添加-Wno-portability.

于 2013-03-29T22:28:23.977 回答
1

经过长时间的反复测试,我决定使用 AC_SUBST。我的解决方案可能不是最干净的,但它对我有用。

在 configure.ac 我添加了以下行 AC_SUBST([DOLLAR_SIGN],[$])

In the Makefile.am I changed my previous line into MY_REVISION=@DOLLAR_SIGN@(shell cat $(SRC_DIR)/$(MY_REVISION_FILE))

And it works. Again, thanks for your help.

于 2013-04-01T22:57:24.947 回答