是否有可能有不同的文件名包比它的实际名称? 我曾尝试使用下面的编译指示,但得到的错误,如“杂注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
阿达源文本的实际存储在技术上是编译器的实现细节。
看你的编译器预期的文件名,我猜您正在使用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;
对于文件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安德森的建议。