与 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
) 链接在一起的项目。如果它应该被证明是可能的,它如何实现?
最佳答案
你需要把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
关于ada - 多个链接的 GPRBuild 项目中的相同基础包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53124246/