2013-10-03 63 views
1

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

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; 
+0

这些链接都告诉你*不*使用'Source_File_Name_Project'。尽管如此 - 我向你保证,'Source_File_Name'工作,但如果你想让我们帮你,你**必须**告诉我们你真正写的,什么文件你写而且,对于偏好,实际的错误信息。你得到了。 –

回答

3

阿达源文本的实际存储在技术上是一个编译器的实现细节。在你的编译器预期的文件名

看,我猜您正在使用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; 
3

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。如Jacob Sparre Andersen所建议的,更好的答案是使用GNAT项目文件和package Naming

+0

是的,我得到不同的错误现在与不知道如何包括对方的单位有关。从你描述的配置文件或项目文件的附加内容中解脱出来需要什么? 错误: “文件parent-child.ads不包含预期的单位。预期的单位parent.child,找到的单位Parent_with_Very_Long_Name.Child” –

+1

我不明白你为什么得到那个特定的错误;我只是在答案中编译了源代码,没有错误。是的,你需要一个配置文件或一个项目文件。 –