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

标签 ada gnat 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 ) 链接在一起的项目。如果它应该被证明是可能的,它如何实现?

最佳答案

你需要把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/

相关文章:

string - Ada 中的多行字符串文字

BBC Micro :Bit with the MCP23017 上 I2C 的 Ada

Stm32F103 Arm 运行时系统,GNAT Ada 编译器

gcc - 将 math.h 与 gprbuild 链接起来

c - 在 Gprbuild 中编译 C 的 Shell 命令

linker - GPRbuild:编译器开关被传递给链接器

compiler-errors - 无法获取简单的Ada Iterator示例进行编译

erlang - 用 Ada 写的 Erlang?

ada - 没有控制台的 Gnat 创建过程

ada - 可以修改通过 'address 属性传递给过程的变量吗?