2017-03-27 10 views
1

最近のGCCの更新後、プリコンパイルされた共通関数の一部が、それらを使用するアプリケーションがビルドされるたびに再コンパイルされていたことに気付きました。プラグマを格納するためのgnat.adcファイルの使用に関連しているようです。私は回避策がありますが、それはかなりではありませんし、私は何かが間違っているかどうか私に誰かが教えてくれることを望んでいました。不要なAda依存関係の再コンパイル(GCC 5.3.0)

ディレクトリ構造:

~/adatest 
    -dependency 
     dependency.ads 
     dependency.adb 
     gnat.adc 
    -dependent 
     dependent.adb 
     gnat.adc 

ファイル:

--dependency.ads 
package dependency is 
    procedure donothing; 
end dependency; 


--dependency.adb 
with ada.text_io; 
package body dependency is 
    procedure donothing is 
begin 
    ada.text_io.put_line("Doing nothing"); 
end; 
end dependency; 

--dependent.adb 
with dependency; 
procedure dependent is 
begin 
    dependency.donothing; 
end dependent; 

gnat.adcファイルの両方が空です。

コンパイル:

cd ~/adatest/dependency 
/usr/gnat/bin/gnatmake -m dependency.adb 
ls 
    dependency.adb dependency.ads dependency.ali dependency.o gnat.adc 
cd ../dependent/ 
/usr/gnat/bin/gnatmake -m dependent.adb -I../dependency 
ls 
    dependency.ali dependency.o dependent dependent.adb dependent.ali dependent.o gnat.adc 

をだから、依存関係がすでにコンパイルされたにもかかわらず、依存再コンパイル依存関係をコンパイルします。 (依存関係のディレクトリのgnat.adcのタイムスタンプである)dependency.aliに保存されているgnat.adcタイムスタンプは、タイムスタンプの比較されていることが表示されます

gcc -c -I../dependency dependent.adb 
    "~/adatest/dependency/dependency.ali" being checked ... 
    -> "gnat.adc" time stamp mismatch 

:なぜgnatmakeの冗長フラグを使用して、私が見ることができます依存ディレクトリのgnat.adcは、不一致と再コンパイルの原因となります。いずれかのgnat.adcファイルを削除すると再コンパイルは停止しますが、実際のプログラムではこれらのプラグマが必要です。以前のGCCバージョン(4.8.2)にはgnat.adcタイムスタンプが保存されていなかったようで、この問題は発生しませんでした。

私たちの現在の回避策は、すべてのgnat.adcファイルの名前をgnat.adc.tmpに変更し、gnatmakeの設定ファイルパラメータ(-gnatec = gnat.adc.tmp)でファイルを指定することです。 .tmp拡張子はファイルが.aliで索引付けされるのを止め、問題を解決します。私はこのkludgeが本当に好きではありませんし、よりクリーンなソリューションがあることを望んでいました。

+0

どのプラグマがパーティション全体であり、どのプラグマがそうでないかを注意する必要があります。 –

答えて

1

ライブラリディレクトリを指定しているようです。 (何もせずに実行するとgnatmakeの出力で説明したように)ディレクトリdependentでは、ディレクトリdependencyでコンパイルした後、

$ gnatmake -m -A../dependency dependent.adb 

すなわち、-Adirを使用しています。次に、

$ ls 
dependent dependent.adb dependent.ali dependent.o gnat.adc 
関連する問題