2013-10-03 67 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

我不明白你爲什麼得到那個特定的錯誤;我只是在答案中編譯了源代碼,沒有錯誤。是的,你需要一個配置文件或一個項目文件。 –