Одинаковый базовый пакет в нескольких связанных проектах GPRBuild
С 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 ответ
Вам нужно поставить 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;
В 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