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