Можно ли использовать подстановочный знак файла в файлах проекта 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 или в сценарии оболочки, если хотите.