- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在大学学习编程入门类(class),选择的语言是 Ada。我正在 Kate 中编码并使用 GNAT 4.6.3 进行编译。我们必须为我们的程序使用教师提供的库,如下所示:
with foo;
use foo;
当然,文件 foo.adb
必须包含在与我的源文件相同的目录中。由于多个项目依赖于这个库,并且我喜欢将每个项目保留在自己的子目录中,因此我必须将库文件复制到每个新项目中。更不用说我的库代码和源代码都在同一目录中。
那么有什么办法可以实现吗:
with ../../lib/foo
use ../../lib/foo
?
我尝试四处查看,但发现的只是有关编译器选项的内容。我不想弄乱这些,特别是因为只有某些项目需要这个特定的库,所以将它添加到全局编译器设置并让编译器毫无意义地搜索它不包含的路径是没有意义的不需要搜索。
最佳答案
我将通过命令行 gnatmake
使用 GNAT 项目工具。
我只是举了一个小例子(所以我可以确定我所说的有效!)。我有3个目录; teacher/
包含教师提供的源代码,我假设您不想更改该源代码,并且可能没有写入权限,jacks_lib/
包含 teacher.txt。 gpr
指向 teacher/
(您也可以将自己的库代码放在那里),而 jack/
包含您的代码 main.adb
和 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 一起正常工作。
关于ada - 让 Ada(用 GNAT 编译)从当前目录外部导入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12582796/
我正在使用 GNAT Programming Studio 更新一些 ada 文件。我有一个样式检查,对于这些旧文件,它会产生数以千计的警告。有用的是 GPS 在位置 View 中有一个小的自动修复“
我必须从C++客户端接收UDP数据报。客户端可以正常工作,并将数据报发送到我在其中编译此代码的ip。数据报的大小为800Bytes。当我发送数据报时,读取过程被阻止。我已经根据以下示例创建了此代码:h
有没有办法用 GNAT.Sockets 获取 MAC 地址? 我已经多次阅读 .ads 文件,但没有看到任何看起来会产生 MAC 地址的内容。 Ads here 最佳答案 在谷歌搜索您的问题时,我找到
我有一个包含多个构建配置的 Gnat/Gprbuild 项目。我有一个主要源文件和一个辅助广告文件,其中主要源文件包括: with Secondary_File; use Secondary_File
编译失败并显示以下 F6 声明: type F3 is delta 2.0**(-4) range 0.0 .. ((2.0**8)-1.0)*2.0**(-4); -- byte 16#f.
我正在尝试使用 GNAT 95 在我的计算机上使用 GNAT-GPL 2015 bundle 编译运行 CENTOS 7 64 位的程序.我收到如下所示的编译器消息: gprbuild: encaps
我需要一个将在后台静默运行但仍与当前用户的桌面交互且不是服务的应用程序。 我希望应用程序在不生成标准输出控制台的情况下启动。 在C中,好像是用Kernel32.dll中的FreeConsole完成的,
我想知道 GNAT 支持哪些 CPU 架构,尤其是在嵌入式领域。 Gnu C 编译器支持的每个目标是否也自动支持 Ada? 最佳答案 AdaCore 的 Embedded Development Pa
在我正在处理的这个多语言 GPRBuild 项目中,我有一些 C++ 库文件 (*.a) 我需要链接到我的可执行文件中。是否有一个 gpr 属性来告诉它链接什么或无论如何将 -l -L 开关传递给链接
所以我正在开发一个 Ada 2012 库,它不应该从默认池中执行分配;所有这些都应该使用用户指定的存储池。 我正在使用一些预定义的包,其中一些显然不遵守规则:例如无限期容器。我想确定我没有使用我不应该
此(声明)代码引发存储错误: type Vector is array (Integer range <>) of Integer; type Array_Starting_At_One (Max :
我有 Ada 程序,可以使用 GNAT - GPS 完美运行和编译。当我运行其 exe 文件并提供用户输入时,该 exe 会立即关闭,而不是说“按任意键继续”。 我在网上搜索了很多,但我只找到了与使用
为了了解 Ada 程序编译背后的过程(不诉诸使用 gpr ),我决定手动编译我的一个项目。为了编译程序,我在每个 .adb 上运行以下命令文件(但是不是手动): $ gcc -c src/.adb -
所以我一直在玩 Ada 一段时间,它是一种很棒的语言,但我不知道如何使可执行文件更小(我在 Windows 上使用 GNAT 5.3)。目前,hello world 的文件大小约为 800 kb。当我
为了了解 Ada 程序编译背后的过程(不诉诸使用 gpr ),我决定手动编译我的一个项目。为了编译程序,我在每个 .adb 上运行以下命令文件(但是不是手动): $ gcc -c src/.adb -
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 2 年前。
我相信我已经发现并修复了 AUnit 中的一个错误,它是 Ada 的 GNAT 编译器工具的一部分。 向 AdaCore 提交 GNAT 工具社区版本错误的最佳方式是什么? 以下程序使用当前版本的编译
这是一个聊天客户端/服务器程序。要进行广播,我必须保存每个连接的客户端,然后写入每个客户端,对吗?管理客户的最佳实践是什么? GNAT.Sockets.Accept_Socket(
documentation for Gnat test 展示了如何生成一个线束和骨架单元测试。它为目标项目中的每个公共(public)函数创建一个单元测试,但是如果我添加另一个单元测试,当我重新生成线
我正在 Ada 中试验 IP 多播,但似乎没有收到任何发送到多播组的流量。不知何故,我似乎无法让应用程序获取传入的数据包。 我可以验证(使用 Wireshark)多播加入是从我的计算机发送的,而且我还
我是一名优秀的程序员,十分优秀!