2014-11-08 123 views
2

我繼承了ADA程序,其中源文件名稱和包裝文件名稱不遵循默認的命名約定。 ADA對我來說是新的,所以我可能會錯過一些簡單的東西,但我在GNAT Pro用戶指南中看不到它。 (This similar question沒有幫助我。)ADA文件名稱與包裝名稱

這裏有幾個例子:

File Name: C_Comm_Config_S.Ada 
Package Name: Comm_Configuration 

File Name: D_Bus_Buffers_S.Ada 
Package Name: Bus_Buffers 

我覺得我有_S.Ada和_B.Ada整理出來,但是我無法找到任何東西顯示程序包名稱和文件名稱其餘部分之間綁定的程序源代碼或生成文件。

當我編譯一個不使用任何其他軟件包的文件時,我得到一個警告:文件名稱與單元名稱不匹配......在這種情況下,這似乎來自C_或D_的前綴。另外,我不清楚前綴C_和D_在ADA的上下文中是否有任何特殊含義,但是如果是這樣,我想知道它。

所以我似乎有兩個問題,C_或D_的前綴,在某些情況下文件名的其餘部分與軟件包不匹配。

回答

5

你可以使用gnatname:看User’s Guide

我從ACATS測試套件的工作目錄複製子目錄a/d/和創建的項目文件p.gpr

project p is 
    for source_dirs use ("a", "d"); 
end p; 

gnatname -P p -d a -d d \*.ada 

這就造成了一個編輯p.gprgnatname和兩個新文件,p_naming.gprp_source_list.txt。這是相當長的,但看起來像

p.gpr

with "p_naming.gpr"; 

project P is 

    for Source_List_File use "p_source_list.txt"; 
    for Source_Dirs use ("a", "d"); 

    package Naming renames P_Naming.Naming; 

end P; 

p_naming.gpr

project P_Naming is 

    for Source_Files use(); 

    package Naming is 
     for Body ("d4a004b") use "d4a004b.ada"; 
     for Body ("d4a004a") use "d4a004a.ada"; 
     for Body ("d4a002b") use "d4a002b.ada"; 
     ... 
     for Body ("aa2010a_parent.boolean") use "aa2010a.ada" at 4; 
     for Body ("aa2010a_parent") use "aa2010a.ada" at 3; 
     for Spec ("aa2010a_parent") use "aa2010a.ada" at 2; 
     for Spec ("aa2010a_typedef") use "aa2010a.ada" at 1; 
     ... 
     for Body ("a22006d") use "a22006d.ada"; 
     for Body ("a22006c") use "a22006c.ada"; 
     for Body ("a22006b") use "a22006b.ada」; 
    end Naming; 

end P_Naming; 

for Body ("aa2010a_parent") use "aa2010a.ada" at 3;當有源文件中的多個單位使用。

p_source_list.txt

a22006b.ada 
a22006c.ada 
a22006d.ada 
a27003a.ada 
a29003a.ada 
... 
d4a002b.ada 
d4a004a.ada 
d4a004b.ada 

建設時,例如,測試d4a004b,你要使用的文件名和後綴

gnatmake -P p d4a004b.ada 
+0

這似乎之後我刪除了反斜槓的工作: 「gnatname -P p -d src -v -v * .Ada」謝謝。 – Jim 2014-11-09 04:39:24

+0

我認爲這取決於你的shell(在我的情況下,Mac OS X Mavericks上的bash 3.2.53)如何解釋通配符。 gnatname需要一個模式,所以即使當前目錄中有匹配的文件,也不能擴展「*」。用單引號或雙引號括起來也應該起作用。 – 2014-11-09 07:19:16

2

Ada標準沒有對源文件命名約定做任何說明。由於看起來您使用的是GNAT,我假設您的意思是「GNAT默認命名約定」。

您可以告訴GNAT您項目文件中的Naming包中的備選文件。

一個簡單的例子:

project OpenID is 
    ... 

    package Naming is 
     for Implementation ("Util.Log.Loggers.Traceback") 
     use "util-log-loggers-traceback-gnat.adb"; 
     for Implementation ("Util.Serialize.IO.XML.Get_Location") 
     use "util-serialize-io-xml-get_location-xmlada-4.adb"; 
    end Naming; 
end OpenID;