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

Фактическое хранение Ada исходного текста технически деталь реализации компилятора.

Глядя на имена файлов, которые ожидает ваш компилятор, я бы предположил, что вы используете GNAT (GCC-Ada). ВНСТ позволяет переопределить схему именования по умолчанию в файлах проекта:

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 по умолчанию. Лучше ответить на использование файлов проекта GNAT и package Naming, как предположил Джейкоб Спарр Андерсен.

+0

Да, теперь я получаю разные ошибки, связанные с единицами, которые не знают, как включить друг друга. Из того, что вы описываете, конфигурационный файл или дополнения к файлу проекта необходимы, чтобы обойти это? Ошибки: «Файл parent-child.ads не содержит ожидаемого устройства. Ожидаемый элемент parent.child, найденный элемент Parent_with_Very_Long_Name.Child« –

+1

Я не понимаю, почему вы получили эту конкретную ошибку; Я просто скомпилировал источник, как в ответе, без ошибок. И да, вам нужен файл конфигурации или файл проекта. –

Смежные вопросы