问题标签 [gprbuild]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gnat - 在 Adacore 的 GPR 文件中,如何设置编译器包含 C++ 的搜索路径
我有一些需要使用 Adacore GNAT Programming Studio 编译的 C++ 代码。
一个文件 ( SomeHeader.h ) 位于相对于我的 GPR 文件的 Common 目录 ( ../../Common/ ) 中。
我们对 C++ 包含指令的约定是使用
无论我做什么,我都无法让 GprBuild 找到“Common/SomeHeader.h” 我按照AdaGem 108的说明进行了 C++ 修改
和
在gprbuild期间,这似乎对我不起作用,令人沮丧的是,即使在将构建详细程度调高之后 ,我似乎也无法获得gprbuild正在使用的后端命令。
我在构建消息中看到了一些临时文件,但在我访问它们之前它们被删除了。
我在 Windows 10 i686-pc-mingw32、GNAT Pro 17.1 上使用 Adacore GPS 17.1。
有谁知道如何在 Adacore 的Gprbuild中获得包含搜索路径?
ada - 分析 GPRBuild
我有一个基于 GPR 的大型项目,编译可能需要 30 多分钟。
分析了构建过程后,我注意到许多明显的低效率(多次调用 gprbuild 而不是聚合,过度使用替代文件而不是配置等)。我想知道是否有某种方法可以“分析”构建过程以查看需要这么长时间。
尤其是当单个文件发生更改并且其中存在错误时,重新编译大约需要 5 分钟。从理论上讲,应该很快意识到必须重新编译该文件(它是唯一一个这样做的)并开始编译过程,迅速发现错误。
从详细的输出来看,仅解析用于定义构建的大量 gpr 文件网络似乎需要相当长的时间,但我想知道它大部分时间都花在了哪里。
因此我的问题是:是否可以分析 gprbuild 完成的构建?如果是这样,怎么做?
ada - 多个链接的 GPRBuild 项目中的相同基础包
使用GPRBuild,我创建了一个名为Lib
. 中的所有包都Lib
驻留在包Base
中,我将其用作基本包:拥有一个基本包Base
。例如,如果我要Apple
在我制作的任何库或应用程序中创建包,它将被写成package Base.Apple
.
这个问题,使用 GPRBuild。为了把东西放在Base
包下,它需要存在。因此,在 GPRBuild 库项目Lib
中,我有一个文件base.ads
表示 package.json 的存在Base
。然后在我使用库的项目中Lib
,我们将其称为Proj
,我也将我所有的包放在包下Base
(里面的包Proj
)。为了做到这一点,我们需要为它创建一个包含包定义的base.ads
文件, .Proj
Base
让我们看一下gpr
项目文件:
由此产生了问题;我们突然有两个文件,都称为base.ads
,都定义了Base
包,每个项目中都有一个:库项目Lib
和Proj
使用库的项目Lib
。因为我们有两个包(和它们的文件)命名相同,所以在编译时我们会得到这个错误,这并不奇怪:
unit "base" cannot belong to several projects
问题是:有没有办法在多个项目中拥有相同的基础包?然后通过导入 ( with
) 链接在一起的项目。如果它应该被证明是可能的,它是如何实现的?
gnat - 'With-in' 重复的 GPRBuild 名称文件
我尝试构建 a_project (第 3 方),其中:
注 1: a_lib 和 a_project 中的 config.gpr 是不同的文件。
注 2:两个 config.gpr 都是“抽象项目”。
构建过程告诉我:
应该做些什么来完成这项工作?
谢谢。
compilation - 在 Adacore 的 GPR 文件中,如何设置编译器以排除具有完整路径的文件
我有一个项目,其中包含几个具有相同名称但位于不同文件夹中的文件。
前任 :
在我的 gprfile 中,我包含了源代码
现在,我想通过使用原语“Excluded_Source_File”来忽略 src 中的文件。
不幸的是,这个原语需要一个文件名,而不是完整路径,所以当我想忽略 ac 时,它会忽略 src 和 stub 中的两个文件。
有谁知道我怎么能做到这一点,而不改变当前的文件夹架构并且不重命名文件?
gnat - GprBuild 可以与 GNAT 一起使用来制作非 GPL 软件吗?
我想使用 GprBuild 创建产品未获得 GPL 许可的产品。这可能吗,我需要使用它的什么变体和 GNAT 才能使其合法?
我读到,为了使用 GNAT 制作未在 GPL 下获得许可的应用程序,我需要使用 FSF 分布式版本,因为该版本发布时带有链接异常(据说;FSF 库目录实际上并没有说明它在这种例外情况下获得许可,但维基百科确实如此)。
也就是说,我正在努力为 GprBuild 找到任何类似的信息。是否有可能 GprBuild 不需要此异常才能这样使用?我的印象是,如果后者是真的,那是出于我不完全理解的技术原因。
ada - 如何用 GPRbuild 排除一些功能?
我在 Ada 中有一个使用 gprbuild 编译的可执行文件。该可执行文件使用一些简单的功能(如 sin e cos)。该可执行文件在绑定到使用 vxwork 设计的 POS(分区操作系统)的应用程序中运行。重新编译整个过程后,会在 POS_API.o 和 ada 可执行文件 (hello.o) 之间出现一堆多函数声明错误。这些函数(sin、cos、...)都在同一个库中。不幸的是,不允许在 POS 中取消引用所有这些功能的最简单的解决方案(设计界限)。关于如何编译或继续的任何建议?为了避免多重引用错误,这是否有可能在没有特定库或某些函数的情况下进行编译?
c - 在 Gprbuild 中编译 C 的 Shell 命令
使用 GtkAda,我正在尝试使用资源 API 将 Glade 文件直接包含在我的代码中。
为此,我们可以使用glib-compile-resources从一组资源中生成 C 代码,然后将其链接到 Ada 代码。
问题是这个 C 代码需要 Gtk 包含我们通常从 Linux 下的pkg-config命令获得的,例如
我想知道如何在GPRBuild项目文件中提供相同类型的信息。
仅供参考,我已经尝试在 C 语言的编译器包中使用pkg-config命令,但没有成功。当然,我设法手工构建,但这有点长:)
c - GPRBuild 不编译 C 文件
我升级到 GNAT Community 2018(GNAT GPL 2017 一切正常)。我有这个项目文件:
现在在 中src/soil
,有几个.ads
和.adb
文件以及.h
和.c
文件。以前,这个项目文件编译了所有这些并在使用时将它们链接在一起就很好了。自 GNAT Community 2018 以来,此文件仅编译 Ada 源代码,而不编译 C 源代码。
我尝试过的事情:
- 确保 GNAT 社区附带的 GCC 仍然支持编译 C。是的。
- 明确定义的
Naming
包设置Spec_Suffix
和Implementation_Suffix
C 到各自的文件结尾。 - 明确指定
Source_Files
并将所有 Ada 和 C 文件放入其中。
无论我做什么,GPRBuild 在调用时都不会编译 C 文件(导致链接器错误)。即使明确指定了 C 文件,也没有错误或警告输出。
如何让 GPRBuild 再次编译 C 文件?
runtime - GPRbuild:聚合项目中忽略的“运行时”属性
我正在开发一些用于在 Ada 中对 Arduino 进行编码的库。每个库都是它自己的项目,我有一个聚合库的聚合项目。我需要为每个项目指定运行时,因为它们在不同的芯片上运行。所以例如我有这样的事情:
以及 Uno 和 Nano 的类似项目。直接构建arduino_due.gpr
工作正常。它应该在指定的文件夹中找到我的运行时。但是,当我构建时agg.gpr
,我得到
无论我使用绝对路径还是相对路径都会发生这种情况,并且当相对路径与Project'Project_Dir
. Runtime
但是,如果我使用编译器开关而不是使用属性--RTS=...
,那么它可以工作,但前提是我使用以 . 为前缀的相对路径Project'Project_Dir
。绝对路径或普通相对路径将导致错误gprbuild: invalid runtime directory runtimes/arduino_due_runtime
。
那么这里发生了什么?这种行为似乎不一致,我在文档中找不到任何关于它的内容,所以我怀疑是一个错误。但我想我会先在这里问,以防我做错了什么。也许我应该只使用子项目或项目扩展?