2014-11-08 114 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;