В GPR-файле Adacore, как настроить компилятор на исключение файла с полным путем

У меня есть проект, который содержит несколько файлов, которые имеют одинаковые имена, но в разных папках.

Пример:

 ->sources
    ->src 
      - a.c
      - b.c
    ->stub
      - a.c
      - z.c

В моем gprfile я включил источник с

for Source_Dirs use ( "sources/**" )

Теперь я хочу игнорировать файлы в src, используя примитив "Excluded_Source_File".

К сожалению, этому примитиву нужно имя файла, а не полный путь, поэтому, когда я хочу игнорировать ac, он игнорирует оба файла в src и stub.

for Excluded_Source_Files use ( "sources/src/a.c" ); -- KO by gprbuild
for Excluded_Source_Files use ( "a.c" ); -- OK but ignore both

Кто-нибудь знает, как я могу это сделать, без изменения текущей архитектуры папок и без переименования файлов?

2 ответа

Решение

Похоже, что вы хотите, это расширение проекта, т.е. создайте второй файл проекта, который расширяет первый. В этом файле проекта секунд, вы можете переопределить a.c

project Stubbed extends "my_project.gpr" is
   for Source_Dirs use ("stub");
end Stubbed;

Подробнее о расширениях проекта вы можете прочитать в Руководстве пользователя GPRBuild.

Я бы использовал переменные сценария; Кроме того, это звучит так, как будто Excluded_Source_Dirs было бы полезно.

type Source_T is ("normal", "stubbed");
Sources : Source_T := external ("SOURCES", "normal");

тогда либо

for Source_Dirs use ("sources/**");
case Sources is
   when "normal" =>
      for Excluded_Source_Dirs use ("sources/stub");
   when "stubbed" =>
      for Excluded_Source_Dirs use ("sources/src");
end case;

или же

for Source_Dirs use ("sources");
case Sources is
   when "normal" =>
      for Source_Dirs use project'Source_Dirs & "sources/src";
   when "stubbed" =>
      for Source_Dirs use project'Source_Dirs & "sources/stub";
end case;

В любом случае,

gprbuild -P prj

(Вы можете добавить дефолт -XSOURCES=normal) или же

gprbuild -P prj -XSOURCES=stubbed
Другие вопросы по тегам