我有一个ada程序,它有一个主程序,现在我想添加另一个程序但是我收到一个错误,说“文件结束了,文件只能有一个编译单元”。我做了一些看起来我认为这是因为你每个文件只能有1个程序。我是否必须创建另一个文件并将该过程单独放入其中?如果是这样,我将如何编译这两个代码并运行它?有人可以告诉我如何编译并运行整个文件。
答案 0 :(得分:0)
正如编译器所说,每个文件只能有一个编译单元。主程序是编译单元,这是一个程序。
如果你想让一个程序运行两个程序,这两个程序都是编译单元,你可以这样做:
with One_Procedure,
Another_Procedure;
procedure Sequential is
begin
One_Procedure;
Another_Procedure;
end Sequential;
如果要并行运行这两个过程,请执行以下操作:
with One_Procedure,
Another_Procedure;
procedure Parallel is
task One;
task Another;
task body One is
begin
One_Procedure;
end One;
task body Another is
begin
Another_Procedure;
end Another;
begin
null;
end Parallel;
程序当然也可以在主程序的声明区域或某些包中声明。
答案 1 :(得分:0)
最近的GNAT和GPRbuild都有选项来指示您要编译的文件的哪些单元:-gnateINNN
为gcc
,-eInn
为gprbuild
,为{{ 3}}
另一种选择是熟悉gnatchop
从文件中提取编译单元,并使用-m
进行最少的重新编译;后者因为在编辑没有“语义上”触及文件中的所有编译单元时运行gnatchop
,因此无法编译世界。 GNAT然后忽略时间戳。我有时会运行像
gnatchop -r -w -c allofit.ada && gnatmake -Ptest -m someunit.adb
为文件someunit.adb
中包含的编译单元Someunit
(过程,包)生成allofit.ada
。
答案 2 :(得分:0)
您可以在主程序中有1个主程序但有几个程序。
procedure main is
...text...
procedure sub1 () is
begin
...text...
end sub1;
procedure sub2 () is
begin
...text...
end sub2;
...text...
end main;