我继承了一个ADA程序,其中源文件名和包文件名不遵循默认的命名约定.ADA对我来说是新手,所以我可能会遗漏一些简单的东西,但我在GNAT Pro用户指南中看不到它.(这个类似的问题对我没有帮助.)
以下是几个例子:
File Name: C_Comm_Config_S.Ada
Package Name: Comm_Configuration
File Name: D_Bus_Buffers_S.Ada
Package Name: Bus_Buffers
Run Code Online (Sandbox Code Playgroud)
我想我已经整理了_S.Ada和_B.Ada,但是我找不到程序源中的任何内容或构建文件,这些文件显示了Package Name和文件名的其余部分之间的绑定.
当我编译一个不使用任何其他软件包的文件时,我收到一个警告:文件名与单元名称不匹配...在这种特殊情况下,这似乎是来自C_或D_的前缀.
另外,我不清楚前缀C_和D_在ADA的上下文中是否有任何特殊含义,但如果确实如此,我想知道它.
所以我似乎有两个问题,C_或D_的前缀,在某些情况下,文件名的其余部分与包不匹配.
您可以使用gnatname:请参阅用户指南.
我将子目录a/和d/ACATS测试套件复制到工作目录并创建了一个项目文件p.gpr:
project p is
for source_dirs use ("a", "d");
end p;
Run Code Online (Sandbox Code Playgroud)
跑gnatname带
gnatname -P p -d a -d d \*.ada
Run Code Online (Sandbox Code Playgroud)
这导致编辑p.gpr和两个新文件,p_naming.gpr和p_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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
在构建时,例如,test d4a004b,你必须使用文件名和后缀:
gnatmake -P p d4a004b.ada
Run Code Online (Sandbox Code Playgroud)