Spec不允许body(在gpr文件中删除)而不触及源文件

时间:2017-09-01 11:50:34

标签: ada gnat

我得到了以下错误,这与生成的资源很常见:

spec of this package does not allow a body

我想知道是否存在放入gpr文件以忽略此错误的规则。 像一个忽略标志。 正如我所提到的那样,这些文件是生成的,所以我对它们没有权利(不会压制它们也不会重写它们)。 更重要的是,有一个适用于每一代的规则会很好。

2 个答案:

答案 0 :(得分:3)

如果你要编译

package Guillaume is
end Guillaume;

package body Guillaume is
end Guillaume;

在Ada 1983模式中,你会得到例如。

gnatmake -gnat83 guillaume.ads
gcc -c -gnat83 guillaume.ads
guillaume.ada:1:09: warning: package "Guillaume" does not require a body
guillaume.ada:1:09: warning: body in file "guillaume.adb" will be ignored

使用规范不要求的主体因Ada 95而变得非法(可以更改主体并且编译过程中不会注意到它需要重新编译,从而导致混淆)。如果您的代码生成器设计用于生成Ada 83,那么我猜您可能不得不面对Ada 83模式的编译 - 但据我所知,GNAT并不能保证100%兼容,特别是在运行时时间系统。

有问题的包体是否实际上都是空的?如果是这样,您可以列出它们并使用项目中的Excluded_Source_List_File属性。如果没有,你就遇到了麻烦,因为没有办法(不改变包源)来让代码执行。

(稍后):实际上,Excluded_Source_List_File没有帮助;它会停止gprbuild查看文件,但不会停止编译器;它是拒绝身体的编译器。抱歉。但如果你可以制作这样的清单,你可以用它来删除坏尸体。

答案 1 :(得分:2)

您可以从源文件列表中排除正文:

for Excluded_Source_Files use ("my_body.adb");