6

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

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

让我们看一下gpr项目文件:

with "lib.gpr";

project Proj is
   -- ...
end Proj;

由此产生了问题;我们突然有两个文件,都称为base.ads,都定义了Base包,每个项目中都有一个:库项目LibProj使用库的项目Lib。因为我们有两个包(和它们的文件)命名相同,所以在编译时我们会得到这个错误,这并不奇怪:

unit "base" cannot belong to several projects

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

4

1 回答 1

6

您需要将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
于 2018-11-02T19:53:40.577 回答