*使用makefile编译Ada时未找到.ads文件

*使用makefile编译Ada时未找到.ads文件,makefile,gnu-make,ada,gnat,Makefile,Gnu Make,Ada,Gnat,我正在尝试编译ada程序,但出现以下错误:test.adb:4:06:未找到文件“motormachinestate.ads”。当然,问题是Makefile是错误的。我一直在寻找如何修复它,但一直无法修复 程序文件如下所示: MotorMachineState.ads:此文件包含包声明。它包含程序使用的程序等- MotorMachineState.adb:此文件包含上述文件的实现。它是一个包体 test.adb:这是程序的入口点。它使用MotorMachineState执行一些操作 Makef

我正在尝试编译ada程序,但出现以下错误:
test.adb:4:06:未找到文件“motormachinestate.ads”
。当然,问题是Makefile是错误的。我一直在寻找如何修复它,但一直无法修复

程序文件如下所示:

  • MotorMachineState.ads:此文件包含包声明。它包含程序使用的程序等-

  • MotorMachineState.adb:此文件包含上述文件的实现。它是一个包体

  • test.adb:这是程序的入口点。它使用MotorMachineState执行一些操作

  • Makefile:我用来编译的Makefile

以下是所述文件的说明:

摩托车房地产广告 亚行 test.adb 生成文件
Ada中的文件应始终使用小写。因此,问题的解决方案是将文件MotorMachineState.ad*重命名为MotorMachineState.ad*

此外,
gnatbind
gnatlink
应该只处理一个*.ali文件,因此Makefile如下所示:

ADA::
    gnatmake -c test.adb motormachinestate.adb
    gnatbind test.ali 
    gnatlink test.ali  

clean::
    rm *.o *.ali test
ADA::
    gnatmake -c test.adb
    gnatbind test.ali 
    gnatlink test.ali  

clean::
    rm *.o *.ali test
编辑 正如@SimonWright所说,实际上没有必要添加
motormacinestate.adb
gnatmake
命令。因此,Makefile可以如下所示:

ADA::
    gnatmake -c test.adb motormachinestate.adb
    gnatbind test.ali 
    gnatlink test.ali  

clean::
    rm *.o *.ali test
ADA::
    gnatmake -c test.adb
    gnatbind test.ali 
    gnatlink test.ali  

clean::
    rm *.o *.ali test

GNAT希望源文件名都是小写

要使用GNAT构建Ada程序(其中所有相关源文件都位于当前目录中),只需运行:

gnatmake main_source_file.adb

gnatmake
命令知道它需要知道的关于纯Ada程序依赖关系的所有信息。

Ada不要求这样做,因为Ada不定义如何存储
GNAT
使用文件系统;另请参见。您可以只使用
gnatmake test.adb
,因为
gnatmake
知道该做什么。或者,您可以在不区分大小写的文件系统(Windows,Mac:-)上运行,而不是编辑问题以将其标记为已解决,您可以通过单击答案左侧的来接受您的答案。如果有更好的答案,您可以稍后更改此选择。我假设您有理由使用糟糕的旧
make
,重新创建依赖关系控制盘,因为Ada语言内置了对编译单元依赖关系管理的支持;支持也比
make
更为复杂
gnatmake
(或者,最近的
gprbuild
)在使用GNAT时提供了这一功能。可能对
gprclean
程序感兴趣。随编译器一起安装的手册中的GPR部分很有用。
ADA::
    gnatmake -c test.adb
    gnatbind test.ali 
    gnatlink test.ali  

clean::
    rm *.o *.ali test
gnatmake main_source_file.adb