重命名阿达包(Rename an Ada package)

2019-10-18 17:17发布

是否有可能有不同的文件名包比它的实际名称? 我曾尝试使用下面的编译指示,但得到的错误,如“杂注source_file_name_project的说法有不正确的标识符”

package Parent_With_Very_Long_Name is end Parent_with_Very_Long_Name;
...
package Parent_With_Very_Long_Name.Child is
    pragma Source_File_Name_Project("parent-child.ads");
end Parent_With_Very_Long_Name.Child;
  • Source_File_Name_Project
  • Source_File_Name

Answer 1:

阿达源文本的实际存储在技术上是编译器的实现细节。

看你的编译器预期的文件名,我猜您正在使用GNAT(GCC-ADA)。 GNAT允许您覆盖默认命名的项目文件格式:

project Short_File_Names is
   package Naming is
      for Specification ("Parent_With_Very_Long_Name.Child")
        use "parent-child.ads";
   end Naming;
end Short_File_Names;


Answer 2:

对于文件pragma Source_File_Name说,语法是

 pragma Source_File_Name (
   [Unit_Name   =>] unit_NAME,
   Spec_File_Name =>  STRING_LITERAL,
   [Index => INTEGER_LITERAL]);

 pragma Source_File_Name (
   [Unit_Name   =>] unit_NAME,
   Body_File_Name =>  STRING_LITERAL,
   [Index => INTEGER_LITERAL]);

所以编译器是抱怨的原因是,你使用不正确的语法。 使用正确的语法,这将是

package Parent_With_Very_Long_Name.Child is
   pragma Source_File_Name 
     (Parent_With_Very_Long_Name.Child, Spec_File_Name => "parent-child.ads");
end Parent_With_Very_Long_Name.Child;

但是编译器现在说

parent-child.ads:2:01: incorrect placement for configuration pragma "Source_File_Name"

此配置编译指示的正确放置是单位之前:

pragma Source_File_Name 
  (Parent_With_Very_Long_Name.Child, Spec_File_Name => "parent-child.ads");
package Parent_With_Very_Long_Name.Child is
end Parent_With_Very_Long_Name.Child;

这固然不错,但其他单位将如何知道呢? (GNAT具有基于源的编译模型)。 答案之一是把编译在配置文件中, gnat.adc默认。 一个更好的答案是使用GNAT项目文件和package Naming ,由Jacob Sparre安德森的建议。



文章来源: Rename an Ada package
标签: ada