让 Ada(用 GNAT 编译)从当前目录外部导入文件?

2024-04-01

我正在大学学习编程入门课程,选择的语言是 Ada。我正在 Kate 中编码并使用 GNAT 4.6.3 进行编译。我们必须为我们的程序使用教师提供的库,如下所示:

with foo;
use  foo;

当然,然后文件foo.adb必须包含在与我的源文件相同的目录中。由于多个项目依赖于这个库,并且我喜欢将每个项目保留在自己的子目录中,因此我必须将库文件复制到每个新项目中。更不用说我的库代码和源代码都在同一目录中。

那么有什么办法可以走:

with ../../lib/foo
use ../../lib/foo

?

我尝试环顾四周,但发现的只是有关编译器选项的内容。我不想弄乱这些,特别是因为只有某些项目需要这个特定的库,所以将它添加到全局编译器设置并让编译器毫无意义地搜索它不包含的路径是没有意义的不需要去寻找。


我将通过命令行使用 GNAT 项目工具gnatmake.

我只是举了一个小例子(这样我就可以确定我所说的有效!)。我有3个目录;teacher/包含教师提供的源代码,我认为您不想更改并且可能没有写入权限,jacks_lib/包含teacher.gpr这指向teacher/(您也可以将自己的库代码放在那里)并且jack/包含您的代码main.adb and main.gpr.

jacks_lib/teacher.gpr:

project Teacher is
   --  This project calls up the teacher-supplied source.

   --  This is a list of paths, which can be absolute but
   --  if relative are relative to the directory where this .gpr
   --  is found.
   for Source_Dirs use ("../teacher");

   --  Keep the built objects (.ali, .o) out of the way. Use the -p
   --  gnatmake flag to have directories like this built
   --  automatically.
   for Object_Dir use ".build";
end Teacher;

jack/main.gpr:

--  teacher.gpr tells where to find library source and how to build it.
with "../jacks_lib/teacher";

project Main is
   --  for Source_Dirs use ("."); (commented out because it's the default)

   --  Keep built objects out of the way
   for Object_Dir use ".build";

   --  Build executables here rather than in Object_Dir
   for Exec_Dir use ".";

   --  What's the main program? (there can be more than one)
   for Main use ("main.adb");
end Main;

jack/main.adb:

with Foo;
procedure Main is
begin
   null;
end Main;

然后,在jack/,

$ gnatmake -p -P main.gpr
object directory "/Users/simon/tmp/jacks_lib/.build" created for project teacher
object directory "/Users/simon/tmp/jack/.build" created for project main
gcc -c -I- -gnatA /Users/simon/tmp/jack/main.adb
gcc -c -I- -gnatA /Users/simon/tmp/teacher/foo.ads
gnatbind -I- -x /Users/simon/tmp/jack/.build/main.ali
gnatlink /Users/simon/tmp/jack/.build/main.ali -o /Users/simon/tmp/jack/main

我应该补充一点,我在 Mac OS X 上使用 GCC 4.7.0,但这应该适用于任何最近的 GNAT。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让 Ada(用 GNAT 编译)从当前目录外部导入文件? 的相关文章

  • Ada 中的派生类型和子类型

    有什么区别 首先 术语 它是 Ada 不是 ADA 它是以 Ada Lovelace 命名的 它不是一个缩写词 子类型与其基类型兼容 因此您可以将基类型的操作数与基类型的操作数混合 例如 subtype Week Days is Integ
  • “在此上下文中需要子类型标记”到底是什么?

    I get Subtype mark required in this context at 子类型掩码到底是什么 为什么它在这里抱怨 main adb Open Route Route 1 3 others gt new Location
  • 有谁知道协议缓冲区的 Ada 插件吗?

    我正在寻找用于协议缓冲区的 Ada 插件 看起来除了 Ada 之外 几乎所有语言插件都可用或正在开发中 嗯 我唯一发现的是这篇论文 不幸的是 我没有找到任何翻译工具的源代码 即你所说的plugin 我唯一能告诉的是该工具是用 C 开发的 U
  • 读取包含“[”的文件时出现 CONSTRAINT_ERROR

    我正在阅读一个简单的文本文件 一切都按其应有的方式工作 除非遇到开括号 字符 然后我得到一个 CONSTRAINT ERROR 我的职能是 GET FILE CONTENTS function Get File Contents File
  • 访问类型声明对释放的影响

    在这两种情况下 在声明块之后 当然是在过程结束之前 是否以相同的方式释放内存 procedure allocation is type T Integer Access is access Integer begin declare P T
  • Ada 95:修改字典程序的输出

    我找到了这本词典作者 William Whitaker 在互联网上 我喜欢它的解析能力 但输出不适合我 问题 对我来说是挑战 给定输入形式 例如 audiam 程序将返回以下输出 纯文本 audi am V 4 1 PRES ACTIVE
  • Ada 中有“this”关键字吗?

    具体来说 任务有没有办法获得对其自身的引用 例如 task type someTask type someTaskAccessor is access someTask task body someTask is pointerToTask
  • Ada 与 Netbeans

    我下载了 Netbeans 插件 用于使用 Ada 进行编程 但是 我不知道如何将Eclipse链接到Ada平台库 什么应该链接到 IDE lib 等 bin 我不知道该怎么办 安装后Ada 插件模块 http wiki netbeans
  • 将从 C 例程分配的数组传递给 Ada

    将结构 记录数组从 Ada 传递到 C 例程是一回事 在本例中 内存管理是在 Ada 中完成的 但是在与第三方库接口时经常会出现这样的问题 内存管理是在C部分完成的 例如 对于 C 结构 typedef struct MYREC int n
  • 是否可以强制指定虚拟地址范围?

    我有一个为特定 嵌入式 多处理器 32 位 架构编写的 Ada 程序 我尝试在 64 位 RHEL 上的模拟中使用相同的代码作为共享对象 因为有多个版本 并且我需要在运行时选择一个版本 我遇到的问题是代码中的几个地方编写代码的人 不是我 使
  • Ada GPS IDE 似乎找不到 GtkAda

    我已经安装了 GNAT 编程工作室 GPS 和 GtkAda 它们似乎都工作正常 但是当我尝试在 从模板新建项目 下构建简单窗口项目时 我收到一堆错误 提示 文件 gtk ads 未找到 这似乎是一个目录 依赖性问题 GPS 不知道在哪里寻
  • 如何使用“单独”关键字

    我无法找出关键字separateAda 及其深度概念 请举个小例子帮助我理解 假设我有一个嵌套过程 with ada text io use ada text io procedure main is procedure proc is b
  • Ada.Containers.Functional_Maps 在 Ada2012 中可用吗?

    有关的信息Ada Containers Functional Maps https docs adacore com gnat rm docs html gnat rm gnat rm the gnat library html ada c
  • Ada 通用平均函数

    我有一个函数可以对记录数组中的某个数值进行平均 该值可以是自然类型增量 也可以是枚举类型增量 我让它正确地总结了这些值 但我的问题是 如何将数组的长度转换为通用类型 以便它可以除以整数和增量类型数字 在记录数组上使用 长度 属性 这样做的优
  • 单元测试期间 Ada 中的异常处理

    我正在尝试为我最近编写的一些 Ada 代码编写一些单元测试 我有一个特殊的情况 我希望得到一个异常 如果代码工作正常 我不会 但在这种情况下我所做的只是测试 而不是编写代码 如果我在测试例程中处理异常 那么我不知道如何继续在该过程中进行测试
  • Ada95 中的线程和信号量

    如何在 Ada95 中使用线程 我可以使用哪些函数来创建 销毁 停止和启动它们 我如何在这种语言中使用信号量 并发性内置于该语言中 因此您可以为任务 即线程 和受保护对象 即比信号量 互斥体 条件变量更强大 使用特定的 Ada 语法 这使得
  • C++ 中的 Ada 子类型等效项

    C 是否提供类似于 Ada 的功能subtype缩小类型 E g type Weekday is Monday Tuesday Wednesday Thursday Friday Saturday Sunday subtype Workin
  • Ada T'Class 的基础知识

    虽然有点不好意思问这个问题 但我知道这是最好的 我已经使用 Ada 编程很多年了 并且几乎可以流利地理解该语言的每个部分 然而 我似乎始终无法完全理解 T Class 借用别人的话 有人可以 像我五岁一样解释一下吗 编辑 我买它只是为了拥有
  • ‘access’参数模式有什么用处?

    Ada 中有三种传递参数的 正常 模式 in out and in out 但还有第四种模式 access 有什么需要它们的吗 即 否则不可能实现的事情 现在 我确实知道 GNAT JVM Ada 编译器在导入的 库 规范中大量使用了它们
  • 在 Ada 中定义通用标量类型包

    我想通过制作一个用于操作多项式的 Ada 包来测试编写 Ada 包的水 可以为多种代数结构定义多项式 因此为了反映这一点 我想使该包通用 以便它可以与浮点数 整数或其他数字子类型一起使用 我现在想说 我对 Ada 的类型系统如何工作或者它的

随机推荐