Список неиспользуемых файлов в Gnat

У меня есть проект в GNAT, и я хотел бы перечислить все файлы, которые никогда не используются. Я думаю сделать это с помощью скрипта Python, но можно ли это легко сделать с помощью GNAT?

Обновлять:

Нашел про gnatelim, но хотя в хелпе написано, что есть опция -P

usage: gnatelim [options] -main=main_unit_name {filename} [-cargs gcc_switches]

options:
 --version - Display version and exit
 --help    - Display usage and exit

 -Pproject     - Use project file project. Only one such switch can be used.

Вроде не работает так как просит основной блок (имея весь проект!):

>gnatelim -Prelease.gpr
gnatelim: No main unit specified
try "gnatelim.exe --help" for more information.

Я использую GNAT 2015


person gccinac    schedule 01.12.2016    source источник
comment
Вы просматриваете § 8.3 Повышение производительности по отношению к размеру?   -  person trashgod    schedule 02.12.2016
comment
Что я хочу сделать, так это получить файлы, которые никогда не удаляются, или получить большие куски мертвого кода и удалить их. Ссылка, которую вы разместили, возможна, но я не вижу, как заставить ее работать с проектом gpr.   -  person gccinac    schedule 02.12.2016


Ответы (3)


Справка для gnatelim довольно ограничена, но я немного поэкспериментировал, и похоже, что хитрость заключается в том, чтобы передать gnatelim имя файла вашего основного модуля:

gnatelim main.adb

Если ваш проект сложнее, чем один каталог, содержащий все необходимые исходные файлы, вы передаете gnatelim и файл проекта, и имя файла вашего основного модуля:

gnatelim -P black_examples.gpr client.adb
person Jacob Sparre Andersen    schedule 06.12.2016
comment
Похоже, что поскольку мой проект представляет собой библиотеку, передать основной модуль невозможно. Тем не менее, я протестировал его с небольшим проектом-заглушкой, и он действительно работал. Большое спасибо! ПД: извините, что так долго не принимал ответ, меня не было в городе. - person gccinac; 13.12.2016

Если в вашем проекте нет основных модулей, ответ очень прост; ничего не используется.

Вам нужно иметь по крайней мере один основной блок, чтобы иметь ссылку, из которой можно посмотреть, какие блоки не используются.

На практике существует гораздо более простая возможность, чем использование gnatelim. Объедините -gnatwe (рассматривать предупреждения как ошибки) с -gnatwa (включить большинство предупреждений), и GNAT сообщит вам, какие единицы withed на самом деле не нужны.

person Jacob Sparre Andersen    schedule 03.12.2016
comment
У меня в проекте есть основной блок, поэтому я не понимаю, почему он не работает. С другой стороны, большое спасибо за другую альтернативу, которую вы даете. Я попробую и дам вам знать :) - person gccinac; 05.12.2016
comment
Правильно ли указан главный блок в файле проекта? for Main use ("main_unit"); - person Jacob Sparre Andersen; 05.12.2016
comment
Да, основной блок указан. Я могу скомпилировать gpr, и он работает нормально, поэтому я не понимаю, почему gnatelim не работает. С другой стороны, я так и не смог опробовать вашу идею. - person gccinac; 06.12.2016

В качестве продолжения ответа Джейкоба представляется необходимым перейти к gnatelim

  • ровно один основной блок, взятый из названных в файле проекта
  • файл проекта

Например, в файле проекта у меня есть несколько основных блоков, перечисленных как

for Main use ("pack-prog.ada", "driver.ada", ...);

(а также for Executable ("pack-prog.ada") use ("prog"); и т. д.)

Указав либо ноль единиц, как вы, либо более одной основной единицы, я получаю

$ gnatelim -Pasnip pack-prog.ada driver.ada  
gnatelim: No main unit specified  
try "gnatelim --help" for more information.  

Указав ровно одну единицу, я получаю

$ gnatelim -Pasnip pack-prog.ada
---------------------------------------------------------
--  List of unused entities to be placed in gnat.adc.  --
---------------------------------------------------------
pragma Eliminate (...

Диагностическое сообщение gnatelim или через gnatelim кажется не совсем адекватным.

person B98    schedule 06.12.2016