4

Frege で複数のインライン アサーションを使用する方法への回答に従って、2 つの Frege モジュール A と B をコンパイルする方法を学びました。ここで、B は A に依存します。B をコンパイルする必要があります。-make オプションを指定すると、コンパイラは B が依存していることを認識しますA で、ソースパス (-sp フラグ) で A を見つけ、最初に A をコンパイルし、次に B をコンパイルします。

ただし、関心のあるすべてのファイルをコンパイラに渡すことはできません。AB の両方をコンパイラに渡すと、「循環依存関係」エラーで失敗しました。また、コンパイラにディレクトリを与える方法も見つかりませんでした (何もしませんでした)。

これは、コンパイルが必要なすべてのファイルを適切にコンパイルするために、依存関係グラフのルートを知る必要があったようです。しかし

  • 根っこが分からないことがあります。
  • それらの多くがあるかもしれません。
  • そのように適切なビルド自動化を行うことは非常に困難です。

ソース ツリー内のすべてのファイルをコンパイラにコンパイルさせるコンパイラ オプションの組み合わせはありますか?

4

2 に答える 2

2

編集:より最近のコンパイラリリースでは、実際にツリー全体をコンパイルできます:

java -jar fregec.jar -d classes/ -make directory1/ directory2/

その限りでは、以下の答えは時代遅れです。


短い答えは「いいえ」です。

長い答え:

  1. アプリケーションがある場合は、ルートを知っている必要があります 。これは、main関数を含むモジュールです。相互に依存しない限り、-make オプションを使用して一度にすべてをコンパイルできます。
  2. ライブラリの場合、ライブラリに属する​​すべてのモジュールをインポートしてコンパイルするだけの疑似モジュールを作成できます。
  3. 上記のいずれも役に立たず、単に「そこにあるものすべて」をコンパイルする必要がある場合は、すべてのファイル名を -make オプションで渡すだけでコンパイルできます (以下を参照)。欠点は、一部のファイルが 2 回コンパイルされる可能性があることです。
  4. Eclipse プラグインの Frege ビルダーはフル ビルドですべてのファイルを正しい順序でコンパイルします。

このような機能は、コマンド ライン コンパイラにも必要なようです。

ところで、「循環依存」エラーをたどることができませんでした。次のコマンドを使用しました。

java -jar ~/frege/fregec.jar  -d bin -make -sp Real_World_Frege-master/ $(find . -type f -name '*.fr' -print)

実際、このエラーは、A が B をインポートし、B (または B がインポートするもの) が A をインポートする場合にのみフラグを立てる必要があります。

于 2013-09-15T18:17:06.477 に答える
2

この問題は現在、frege-maven-plugin によって対処されています。

https://github.com/Frege/frege-maven-plugin

これはmaven centralで利用できます。

于 2013-09-24T15:48:41.843 に答える