0

Ada は私にはまだ慣れていないので、GPS IDE の使い方を探っています。先ほど別の質問をしましたが、この問題がそれよりも優先され、私のトラブルの根底にある可能性があると思います。

コンパイルすると、*warning: source file ... not found という長いリストが表示されます。

私の .gpr ファイルでは、spec と body のすべてのソース ファイルをリストし、次の命名規則を使用しています。

package Naming is
   for Casing               use "mixedcase";
   for Dot_Replacement      use ".";
   for Spec_Suffix ("ada")  use "_s.ada";
   for Body_Suffix ("ada")  use "_b.ada";
end Naming;

エラーメッセージがすべて次のようになっているのは奇妙です。

warning: source file "xxx_b.adb" not found

またはこれ

warning: source file "xxx.adb" not found

これら (xxxb.adb または xxx.adb) のどちらも、.ada で終わる必要があるファイル仕様に準拠していないことに注意してください。

誰かがここで何が起こっているのか説明できますか?

4

3 に答える 3

1

GPRbuildユーザーズガイドから:

文字列は、属性の値またはこれらの属性のインデックスとして使用されます。特に明記されている場合を除き、一般に大文字と小文字が区別されます [...]

これに基づいて、 and の代わりに as index を使用する必要があると"Ada"思い"ada"ます。現在、これをテストするためのツールにアクセスできないため、試してみることをお勧めします。Spec_SuffixBody_Suffix

于 2013-02-18T09:53:22.083 に答える
1

まず、これは Ada の問題ではなく、Gnatの問題です。他の Ada コンパイラでは、使用しているファイル名に問題はありません。

ただし、Gnat は、ソース ファイルごとに 1 つのプログラム ユニット (パッケージ本体、パッケージ仕様、スタンドアロン ルーチンなど) しかないと想定しているという点でかなり独特です。これは、そのユニットの Ada インテントファイアを知るだけで、任意のプログラム ユニットのソース コードを見つけることができるという点でもかなりユニークであるためです。他のほとんどの Ada コンパイラは、ファイル名をプログラム単位にマップするある種のライブラリ ファイルを保持しており、すべてのファイルをそのライブラリ ファイルに登録する必要があります。(一般的な C コンパイラは、すべてのコードのファイルを見つけるという問題を完全にユーザーに任せているだけです)。

一般に、Gnat で行う最も簡単な方法は、問題を最小限に抑える方法ですが、デフォルトのファイル命名規則をそのまま使用することです (もちろん、複数のプログラム ユニットを 1 つのファイルに入れないようにしてください。

すでにいくつかの既存の Ada コード (おそらく別のコンパイラ用に開発されたもの) がある場合、それを Gnat にインポートする最も簡単な方法は、通常、すべてに対して gnatchopツールを実行することです。それが私があなたに試してみることをお勧めするものです。

于 2013-02-15T19:21:09.663 に答える
1

この問題は、他の質問への回答で言及した問題の 1 つであると 99% 確信しています: GNAT は通常、ファイル内の複数のコンパイル ユニットをサポートしていません。GPSとこれらのファイルであなたが説明した動作を正確に取得しました:

james_s.ada:

with Jane;
package James is
end James;

ジム_s.ada:

package Jim is
end Jim;
package Jane is
end Jane;

コンパイル時のエラー メッセージにjames_s.adaは、 が見つからないというメッセージが表示されますJane_s.adaが、GPS に の宣言に移動するように要求するJaneと、 の「正しい」行に移動しjim_s.adaます。

gnatchopsplitを使用できますjim_s.adaが、プロジェクト ファイルや命名規則を認識しません。おそらく、機能するコードの既存の名前を保持したいのでgnatchop、必要に応じて の出力の名前を変更します。

でも!驚いたことに、GNAT1 つのファイルに複数のコンパイル ユニットを含めることをサポートしていることがわかりpackage Namingました。プロジェクト ファイルで指定すると、ファイル内の各ユニットについて次のように伝えられます。

package Naming is
   for Casing use "mixedcase";
   for Dot_Replacement use ".";
   for Spec_Suffix ("ada") use "_s.ada";
   for Body_Suffix ("ada") use "_b.ada";
   for Spec ("Jim") use "jim_s.ada" at 1;
   for Spec ("Jane") use "jim_s.ada" at 2;
end Naming;

gnatchopマルチユニットファイルまたはソースツリー全体のいずれかで、これを行うか、弾丸を噛んで使用するかはあなた次第です。

于 2013-02-15T14:48:25.640 に答える