3

ファイルからコンテンツを読み取り、それを CFLAGS に渡す Makefile.in を作成しました。./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 

この問題は、かなり前から私を悩ませています。どこでも検索しましたが、その解決策を見つけるのに役立つものは見つかりませんでした。つまり、必要なのは、"$(shell cat $(top_srcdir)/$(MY_REVISION_FILE))" のような未解釈のテキストを Makefile.am から Makefile.in にコピーする方法だけです。

何か案が?

ありがとう、オリバー

4

2 に答える 2

5

Makefile.amそれが言うように、問題は、移植可能な Makefile コードを含めることのみを意図しているときに、GNUism を で使用していることです。

移植可能になるようにコードを書き直してください (AM_CPPFLAGSコンパイラではなくプリプロセッサにフラグを渡すため、使用する必要があります)。

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

すべてのコンパイルで呼び出したくない場合はcat、値を で見つけて、に入れるか、またはconfigure.acに入れることができます。AC_SUBSTMakefileAC_DEFINEconfig.h

または、移植不可 (ಠ_ಠ) にしたい場合は-Werror、 または を取り出すAM_INIT_AUTOMAKEAUTOMAKE_OPTIONS、 を追加することができます-Wno-portability

于 2013-03-29T22:28:23.977 に答える
1

何度も何度もテストした後、AC_SUBST を使用することにしました。私の解決策は最もクリーンではないかもしれませんが、私にとってはうまくいきます。

configure.ac に次の行を追加しました AC_SUBST([DOLLAR_SIGN],[$])

Makefile.am で、前の行を MY_REVISION=@DOLLAR_SIGN@(shell cat $(SRC_DIR)/$(MY_REVISION_FILE)) に変更しました

そして、それは機能します。繰り返しますが、あなたの助けに感謝します。

于 2013-04-01T22:57:24.947 に答える