ADA文件名与包名称

时间:2014-11-08 07:28:28

标签: ada

我继承了一个ADA程序,其中源文件名和包文件名不遵循默认的命名约定。 ADA对我来说是新手,所以我可能会遗漏一些简单的东西,但我在GNAT Pro用户指南中看不到它。 (This similar question没有帮助我。)

以下是几个例子:

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,但是我找不到程序源中的任何内容或构建文件,这些文件显示了Package Name和文件名的其余部分之间的绑定。

当我编译一个不使用任何其他软件包的文件时,我收到一个警告:文件名与单元名称不匹配...在这种特殊情况下,它似乎来自C_或D_的前缀。 / p>

另外,我不清楚前缀C_和D_在ADA的上下文中是否有任何特殊含义,但如果确实如此,我想了解它。

所以我似乎有两个问题,C_或D_的前缀,在某些情况下,文件名的其余部分与包不匹配。

2 个答案:

答案 0 :(得分:5)

您可以使用gnatname:请参阅User’s Guide

我将子目录a/d/从ACATS测试套件复制到工作目录并创建了一个项目文件p.gpr

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

并使用

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

导致了经过修改的p.gpr和两个新文件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

答案 1 :(得分: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;
相关问题