1

この質問は質問を拡張しますautotoolsでサブプロジェクトを処理する方法は?

だから私はmodules/libfooに独自のMakefile(GNUautotoolsではない)を持ついくつかのプロジェクトを持っています

SUBDIRS = include / jsonbox Makefile.amを追加しましたが、正常にコンパイルされますが、。/configureを呼び出してトップディレクトリから作成した場合に限ります。

サブディレクトリ、たとえばbuildを作成し、そこから../configureを実行すると、make中にエラーが発生しました。

   Making all in modules/libfoo
   /bin/sh: line 17: cd: modules/libfoo: No such file or directory
   make: *** [all-recursive] Error 1

これを処理することは可能ですか?さまざまなアーチとCFLAGS用にいくつかのビルドダイアが必要です。

編集:ドキュメント で示唆されているように、ネストされたプロジェクトでGNUmakefile.inを作成しましたただし、VPATHではまだ機能しません。

Making all in modules/libfoo
make[1]: Entering directory `/home/galadog/test/build/moudles/libfoo'
GNUmakefile:2: Makefile: No such file or directory
make[1]: *** No rule to make target `Makefile'.  Stop.
make[1]: Leaving directory `/home/galadog/test/build/moudles/libfoo'
make: *** [all-recursive] Error 1

Edit2 実際のMakefileはここで見ることができます: https ://github.com/anhero/JsonBox/blob/master/Makefile

4

1 に答える 1

1

残念ながら、次のいずれかがないと、これを正しく達成することはできません。

  1. アップストリームのMakefileを変更/置換します。
  2. アップストリームライブラリに独自のmakeルールを追加し、それらのMakefileを無視します。

リンクしたドキュメントはmake distcheck、実際のビルドをサポートせずに、の問題を回避することに主に焦点を当てています。

ただし、最小限の作業で機能する簡単なハックが1つあります。それは、サブツリー全体をビルドディレクトリにコピーすることです。これはあまり良い解決策ではありませんが、サブツリービルドを機能させることができます。

SUBDIRS = modules/libfoo

# and possibly all other -recursive targets you'll be using
all-recursive: copy-libfoo

copy-libfoo:
    mkdir -p modules
    cp -R -H $(top_srcdir)/modules/libfoo modules/

しかし、私が言ったように、それは醜いです。allアップストリームのMakefileは、正しいautomakeターゲット(installなど)を定義する必要があるため、この場合は、次GNUmakefileのようにプロジェクトのサブディレクトリにを追加する必要があります。

include Makefile
INSTALL:

これは、回避するためのダミーターゲットを提供し*** No rule to make target 'install'ます。そしておそらくそれも。次にEXTRA_DIST、使用したいmake distが、それはすべてリンクされたドキュメントでカバーされている場合。


正直なところ、あなたは滑りやすい地面にいます。もし私があなたなら、そのプロジェクトを使わずに無視するでしょう。なぜなら、同じものを最初から書くよりも維持するのが難しいからです。

私が検討する2番目の解決策であり、正しく機能するのは、メインでMakefileを複製し、Makefile.amそのサブディレクトリに再帰的なautomakeを使用しないことです。

LIBRARIES = modules/libfoo/libfoo.a

modules_libfoo_libfoo_a_SOURCES = modules/libfoo/src/a.c # ...

# and possibly some...
EXTRA_DIST = # ...
于 2012-08-20T08:17:32.890 に答える