多个链接的GPRBuild项目中的相同基础包

D. *_*aro 6 ada gnat gprbuild

使用GPRBuild,我创建了一个名为的库项目Lib.所有包都Lib驻留在包中Base,我将其用作基本包:具有基本包Base.例如,如果我要Apple在我创建的任何库或应用程序中创建包,它将被写为package Base.Apple.

这个问题,使用GPRBuild.为了把东西放在Base包装下面,它需要存在.Lib因此,在GPRBuild库项目中,我有一个base.ads表示包存在的文件Base.然后在我正在使用该库的项目中Lib,让我们将其称为Proj,我也将所有包放在Base包(包内Proj)中.为了做到这一点,我们需要使用包定义来创建一个base.ads文件.ProjBase

我们来看看gpr项目文件:

with "lib.gpr";

project Proj is
   -- ...
end Proj;
Run Code Online (Sandbox Code Playgroud)

通过这个出现了问题; 我们突然有两个文件,都叫做base.ads,都定义了Base包,每个项目一个:库项目Lib,以及Proj使用库的项目Lib.由于我们有两个包(和它们的文件)命名相同的东西,我们得到这个错误,这在编译时完全不奇怪:

unit "base" cannot belong to several projects

问题是:有没有办法在多个项目中拥有相同的基础包?然后通过import(with)链接在一起的项目.如果它应该被证明是可能的,它怎么能实现呢?

Sim*_*ght 6

您需要将Base包放在自己的项目中.以下是最小的演示.

base/,

project Base is
end Base;

package Base is
end Base;
Run Code Online (Sandbox Code Playgroud)

lib/,

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

package Base.Lib is
end Base.Lib;
Run Code Online (Sandbox Code Playgroud)

proj/,

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

with Base.Lib;
package Base.Proj is
end Base.Proj;
Run Code Online (Sandbox Code Playgroud)

然后,

$ cd proj/
$ gprbuild
using project file proj.gpr
Compile
   [Ada]          base.ads
   [Ada]          base-lib.ads
   [Ada]          base-proj.ads
Run Code Online (Sandbox Code Playgroud)