Gcc gnatmake-o标志产生不正确的对象文件名

Gcc gnatmake-o标志产生不正确的对象文件名,gcc,ada,gnat,ghdl,Gcc,Ada,Gnat,Ghdl,我正试图用gnatmake编译一个.adb文件,-o标志没有生成我想要的对象文件名: $ gnatmake --GCC=g++ -D bin/src/ghdl_grt/ -f -u -c src/ghdl_grt/grt-vstrings_io.adb -o bin/src/ghdl_grt/grt-vstrings_io.adb.o g++ -c -Isrc/ghdl_grt/ -I- -o /home/jon/controlix-code/bin/src/ghdl_grt/grt-vstr

我正试图用
gnatmake
编译一个
.adb
文件,
-o
标志没有生成我想要的对象文件名:

$ gnatmake --GCC=g++ -D bin/src/ghdl_grt/ -f -u -c src/ghdl_grt/grt-vstrings_io.adb -o bin/src/ghdl_grt/grt-vstrings_io.adb.o

g++ -c -Isrc/ghdl_grt/ -I- -o /home/jon/controlix-code/bin/src/ghdl_grt/grt-vstrings_io.o src/ghdl_grt/grt-vstrings_io.adb

如您所见,它的路径是正确的,但是文件名应该以
.adb.o
结尾,并且它只以
.o
结尾。有什么想法吗?

嗯,这是一个奇怪的命名方案,但是。。。
gnatmake
仅允许您使用
-o
指定备用的可执行文件名称:

-o名称选择另一个可执行文件名称

但是,您可以告诉gnatmake将选项传递给编译器:

-CARG opts opts将传递给编译器

同样,对于活页夹和链接器:

-驳船opts opts被传递到活页夹

-largs opts opts将传递给链接器

因此,


这是个奇怪的命名方案,但是。。。
gnatmake
仅允许您使用
-o
指定备用的可执行文件名称:

-o名称选择另一个可执行文件名称

但是,您可以告诉gnatmake将选项传递给编译器:

-CARG opts opts将传递给编译器

同样,对于活页夹和链接器:

-驳船opts opts被传递到活页夹

-largs opts opts将传递给链接器

因此,


对于gnatmake,-o'选择另一个可执行文件名'。但即使单独使用gcc(或g++)也会失败,至少在macOS上是这样,因为
gnat1:不正确的对象文件名

我发现您可以编译成汇编程序,然后再编译它。使用一个我碰巧撒谎的本地文件

$ g++ -D $PWD -c gator2.adb -S -o gator2.adb.s
$ g++ -D $PWD -c gator2.adb.s

对于gnatmake,-o'选择另一个可执行文件名'。但即使单独使用gcc(或g++)也会失败,至少在macOS上是这样,因为
gnat1:不正确的对象文件名

我发现您可以编译成汇编程序,然后再编译它。使用一个我碰巧撒谎的本地文件

$ g++ -D $PWD -c gator2.adb -S -o gator2.adb.s
$ g++ -D $PWD -c gator2.adb.s

我别无选择,只能在这个项目上使用Ada,因为GHDL是我能找到的唯一开源VHDL编译器/模拟器,我需要在我为这个项目准备的嵌入式系统中支持VHDL,我需要使用GNAT,因为它是镇上唯一的游戏……为什么你需要“.adb.o”?我需要“.adb.o”在我使用的makefile系统中计算递归依赖关系的东西。UPDATE:我发现了如何使用“mv”在makefile中使用通配符重命名(请参阅),这似乎解决了我的问题。我仍然认为GNAT有一个“-o”选项是明智的,它(无声地)更改输出文件的名称,同时保持输出目录不变(?!??)。至少可以说令人困惑…@JonTaylor——这有点奇怪,但在这一点上,GCC相当粗糙,有各种各样的。。。积累和特质我别无选择,只能在这个项目上使用Ada,因为GHDL是我能找到的唯一开源VHDL编译器/模拟器,我需要在我为这个项目准备的嵌入式系统中支持VHDL,我需要使用GNAT,因为它是镇上唯一的游戏……为什么你需要“.adb.o”?我需要“.adb.o”在我使用的makefile系统中计算递归依赖关系的东西。UPDATE:我发现了如何使用“mv”在makefile中使用通配符重命名(请参阅),这似乎解决了我的问题。我仍然认为GNAT有一个“-o”选项是明智的,它(无声地)更改输出文件的名称,同时保持输出目录不变(?!??)。至少可以说令人困惑…@JonTaylor——这有点奇怪,但在这一点上,GCC相当粗糙,有各种各样的。。。累积和特性上述解决方案不起作用:“gnatmake--GCC=g++-D bin/src/ghdl_grt/-f-u-c src/ghdl_grt/grt-vstrings_io.adb-cargs-o bin/src/ghdl_grt/grt-vstrings_io.adb.o”产生以下输出:“g++-c-Isrc/ghdl_grt/-o bin/src/ghdl_grt/grt-vstrings_io.adb.o-I--o/home/jon/controlix code/bin/src/ghdl_grt/grt-vstrings_io.o src/ghdl_grt/grt-vstrings_io.adb”,这会导致错误(可能是由于存在多个不同的-o开关和参数)……上述解决方案不起作用:”GGGGGgrt/grt/grt/grt/grt/grt/grt/grt/grt/grt/grt/grt/grt-T-vstrings-vstrings/u-io.adb.adb-adb-adb-cars-cars-cars-o-o-o-cars-o-o-o-o-o-to-to-to-to-to-to-to-to-to-to-to-to-t-vt-vst-vstrit-vstrit-vstrit-vstrit-vstrings-vstrings-vstrings-vstrings-vstrings-vstrings-vstrings-t-vtrings-vt-vths-vt-s-vtrings-to-vths-to.io.io.io.io.io.io.io.io.io.io.io.ado.错误(可能是由于存在多个不同的-o开关和参数)。。。。