Одинаковый базовый пакет в нескольких связанных проектах GPRBuild - PullRequest
0 голосов
/ 02 ноября 2018

С GPRBuild я создал проект библиотеки под названием Lib. Все пакеты в Lib находятся в пакете Base, который я использую в качестве базового пакета: иметь базовый пакет Base. Например, если бы я создал пакет Apple в любой библиотеке или приложении, которое я создал, он был бы записан как package Base.Apple.

Проблема с этим при использовании GPRBuild. Чтобы поместить вещи в пакет Base, он должен существовать. Поэтому в проекте библиотеки GPRBuild Lib у меня есть файл base.ads, обозначающий наличие пакета Base. Затем в проекте, где я использую библиотеку Lib, давайте назовем ее Proj, я также поместил все свои пакеты в пакет Base (пакеты внутри Proj). Для этого нам нужно создать файл base.ads для Proj с определением пакета, Base.

Давайте посмотрим на файл проекта gpr:

with "lib.gpr";

project Proj is
   -- ...
end Proj;

Из-за этого возникает проблема; у нас неожиданно появилось два файла, каждый из которых называется base.ads, оба определяют пакет Base, по одному в каждом проекте: проект библиотеки Lib и проект Proj с использованием библиотеки Lib. Поскольку у нас есть два пакета (и их файлы) с одинаковыми именами, мы получаем эту ошибку, что вовсе не удивительно, во время компиляции:

unit "base" cannot belong to several projects

Вопрос: есть ли способ иметь один и тот же базовый пакет в нескольких проектах? Проекты, которые затем связываются вместе посредством импорта (with). Если это окажется возможным, как этого достичь?

1 Ответ

0 голосов
/ 02 ноября 2018

Вам необходимо поместить пакет Base в собственный проект. Ниже приведена минимальная демонстрация.

В base/,

project Base is
end Base;

package Base is
end Base;

В lib/,

with "../base/base.gpr";
project Lib is
end Lib;

package Base.Lib is
end Base.Lib;

In proj/,

with "../lib/lib.gpr";
project Proj is
end Proj;

with Base.Lib;
package Base.Proj is
end Base.Proj;

Тогда

$ cd proj/
$ gprbuild
using project file proj.gpr
Compile
   [Ada]          base.ads
   [Ada]          base-lib.ads
   [Ada]          base-proj.ads
...