Можно ли использовать подстановочный знак файла в файлах проекта gprbuild?

У меня есть проект, в котором я часто создаю много новых файлов основной точки входа *.adb в определенном каталоге. Есть ли способ настроить мой проект с помощью gprbuild таким образом, чтобы добавление новой основной программы не требовало редактирования файла проекта .gpr?

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

      project Adabots is

   for Source_Dirs use ("src", "src/examples");
   
   for Main use ("build_wall.adb", "remove_wall.adb", "get_stone.adb", "staircase_down.adb", "josephine.adb", "dig_cavern.adb", "build_maze.adb", "elevator.adb", "lovelace.adb", "dig_hallway.adb", "spiral_staircase.adb", "walk_up_stairs.adb");

Но я бы просто сказал, что каждый файл .adb внутри src/examples следует рассматривать как основной.

Полный проект здесь, если это поможет.

1 ответ

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

Однако вы можете делать все, что хотите, указав имена файлов в качестве переменных сценария:

         Main_Names := external_as_list ("executables", ",");
   for Main use Main_Names;

Используя external_as_list, вы можете указать имена всех исполняемых файлов в командной строке, разделенные запятыми:

      gprbuild adabots.gpr -Xexecutables=build_wall.adb,remove_wall.adb,get_stone.adb

Теперь вы можете использовать подстановку оболочки, чтобы предоставить все *.adb файлы в src/examples (использует basename раздеть src/examples/дорожка; тогда tr чтобы объединить имена запятыми):

      gprbuild adabots.gpr -Xexecutables=$(echo src/examples/*.adb | xargs basename | tr '\n' ,)

Это можно сделать в Makefile или в сценарии оболочки, если хотите.

Другие вопросы по тегам