的文档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 的正确位置是在单元之前:
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
。package Naming
正如 Jacob Sparre Andersen 所建议的那样,更好的答案是使用 GNAT 项目文件和。