Ada_Ru форум

Обсуждение языка Ада

pragma Source_File_Name

Оставить новое сообщение

Сообщения

cs_a994
pragma Source_File_Name
2015-06-03 00:42:02

Hello!

Столкнулся с такой неприятностью...

Есть такая вещь, как pragma Source_File_Name. Применяется для изменения стандартной схемы именования файлов. GNAT предполагает, что имя файла полностью набрано в нижнем регистре и получается транслированием имени пакета по определённым правилам. В Руководстве дано такое описание:

pragma Source_File_Name

( [Spec_File_Name =>] STRING_LITERAL

[,[Casing =>] CASING_SPEC]

[,[Dot_Replacement =>] STRING_LITERAL]);

 

pragma Source_File_Name

( [Body_File_Name =>] STRING_LITERAL

[,[Casing =>] CASING_SPEC]

[,[Dot_Replacement =>] STRING_LITERAL]);

 

pragma Source_File_Name

( [Subunit_File_Name =>] STRING_LITERAL

[,[Casing =>] CASING_SPEC]

[,[Dot_Replacement =>] STRING_LITERAL]);

 

CASING_SPEC ::= Lowercase | Uppercase | Mixedcase

The first argument is a pattern that contains a single asterisk indicating the point at which the unit name is to be inserted in the pattern string to form the file name. The second argument is optional. If present it specifies the casing of the unit name in the resulting file name string.

Оказалось, что задание Casing => Mixedcase не копирует имя пакета из инструкции with ( ? ) один в один, а транслирует его с заменой части букв на нижний регистр. Конкретно у меня pragma Source_File_Name ( Spec_File_Name => *.ads , Casing => Mixedcase ) сделала такую замену: GUI_Modes => Gui_Modes. Linux, естественно, файла GUI_Modes.ads не находит, поскольку ищет Gui_Modes.ads.

Как к этому относиться, даже и не знаю.

On 06/03/2015 10:42 AM, cs_a994@... [ada_ru] wrote:

 

Оказалось, что задание Casing => Mixedcase не копирует имя пакета из

инструкции with ( ? ) один в один, а транслирует его с заменой части

букв на нижний регистр. Конкретно у меня pragma Source_File_Name (

Spec_File_Name => *.ads , Casing => Mixedcase ) сделала такую замену:

GUI_Modes => Gui_Modes. Linux, естественно, файла GUI_Modes.ads не

находит, поскольку ищет Gui_Modes.ads.

 

Как к этому относиться, даже и не знаю.

 

А использовать "стандартное" именование невозможно?

Оказалось, что задание Casing => Mixedcase не копирует имя пакета из

инструкции with ( ? ) один в один, а транслирует его с заменой части

букв на нижний регистр. Конкретно у меня pragma Source_File_Name (

Spec_File_Name => *.ads , Casing => Mixedcase ) сделала такую замену:

GUI_Modes => Gui_Modes. Linux, естественно, файла GUI_Modes.ads не

находит, поскольку ищет Gui_Modes.ads.

 

Это полностью соответствует документации :)

Как к этому относиться, даже и не знаю.

 

Можно задать общую схему именования при помощи прагм с *.ads и *.adb,

а для "особых" модулей определить имена файлов индивидуально - прагма

с именем модуля всегда имеет приоритет над *.ads и *.adb

 

Это описано в Alternative File Naming Schemes в GNAT Users Guide

03.06.2015 20:44, Vadim Godunko vgodunko@... [ada_ru] пишет:

 

А использовать "стандартное" именование невозможно?

 

На фоне всеобщей каллиграфии именование по умолчанию выглядит дурацким, мне кажется.

 

Странно, не видел такой проблемы, при том, что «стандартное» именование терпеть не могу. Либо движок GPR работает по–другому, либо на Windows и Mac OS X у меня каждый раз была регистронезависимая файловая система, а на Linux все идентификаторы, как на подбор, не вызвали проблем.

 

С уважением,

Левашев Иван

 

--

If you want to get to the top, you have to start at the bottom

Hello!

В Виндах файловая система регистро-независима.

У меня гадость полезла при попытке собрать проект с разнобоем именования ( аж все три варианта представлены: всё в нижнем регистре ( стандарт ), заглавные в начале и полный разнобой ) не из GPS, а написав makefile. И делать что-то с этим уже поздно.

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти