2

MyMakefile.amには、次のようなファイル(さまざまな定義済み変数を含む)が含まれています。

include make.config

...

問題は、このファイルが、config.generator.shある入力ファイル(ie)に基づいてツール(ie)によって生成されることですinput.dat。簡単で間違った考えは、生成するルールを追加することmake.configです。

make.config : input.dat
    config.generator.sh input.dat > make.config

include make.config

...

このコンテンツは、なしautomakeでそれ自体で完全に機能するmakefileですが、アイデアはで運命づけられていautomakeます。このファイルは、実行する前にmake.config含まれています(ファイルがまだ生成されていないため、失敗します)。automakemake

automake: cannot open < make.config: No such file or directory

(おそらく別のディレクティブを使用して)実行さincludeれるまでディレクティブの効果を延期する方法はありますか?make

makefileの生成が行われる前に、任意のコマンドを単純に実行する方法がおそらくあります(つまりAC_CONFIG_COMMANDS*)。config.generator.shただし、同じビルドプロセス中に生成される実行可能ファイルを使用することになっているため、質問はより複雑になります(したがって、同じプロジェクトのmakefileによって論理的に管理する必要がある依存関係チェーンがあります)。ドキュメントは、代替手段を提供せずにロジックを確認するだけです。

4

2 に答える 2

2

解決策は、Automakeのメーリングリストのこの電子メールに記載されています。

アイデアは、include小さな通常の「ラッパー」内でディレクティブを使用しmakefile、それにAutomake-generatedMakefileを含めることです(大文字に注意してくださいM)。makefileはAutomakeテンプレートではないため、include存在しないファイルのビルドをトリガーする期待どおりに機能します。

ご了承ください:

  • デフォルトでは、ユーティリティは最初に(ではなく)make検索し、このアプローチをシームレスに機能させます。makefileMakefile
  • 内部のすべてのルールを指定しMakefile.am、「ラッパー」をmakefile単純に保つことをお勧めします。Makefile存在しないファイルのルールは、とにかく生成されたものから自然に得られます。
于 2012-07-29T15:47:12.277 に答える
2

今日、OCamlプロジェクトをAutotoolsに移動するときに、同じ厄介な問題に遭遇しました。私の解決策は、autoconfの置換を使用して回避することautomakeです。上記の例では、次のように置換を追加しconfigure.acます。

AC_SUBST([include_make_config], ["include make.config"])

ディレクティブを変数参照Makefile.amに置き換えて調整します。includeautoconf

make.config : input.dat
    config.generator.sh input.dat > make.config

@include_make_config@
...

automake線に触れない@include_make_config@ので、生成されたに持ち越されMakefile.inます。autoconf引き継ぐとき、それは変数をinclude make.configfinalので置き換えますMakefile

注:私はこれをOCamlのocamldep依存関係ジェネレーターで使用します。

于 2014-06-27T17:50:30.963 に答える