与How do I find the location of the executable in C?相似,但在Ada。
我是否可以使用一个很好的包以跨平台方式确定可执行位置? (Windows和Linux)
Google上没有任何内容,或通过GNAT / Ada软件包查看
现有的套餐失败了,我该如何做呢?
答案 0 :(得分:2)
Ada.Command_Line.Command_Name
为您提供可执行文件的名称。在Linux上,这会在您调用程序时为您提供名称。由于您经常只使用ls
并让shell搜索实际可执行文件的路径,因此您必须自己在Ada.Command_Line
和Ada.Directories
之上重新实现该功能。
答案 1 :(得分:1)
作为@egilhh comments,语言定义的方法是使用Ada.Directories
提供的Current_Directory
函数。
with Ada.Text_IO, Ada.Directories;
procedure PWD is
begin
Ada.Text_IO.Put_Line(Ada.Directories.Current_Directory);
end PWD;
由于跨平台行为对您的用例至关重要,因此您需要对代表性目标进行测试。您可能还想研究相应的Ada.Directories
实现。使用gnatkr
确定相关的文件名。给定一个名为ADA_INC
的环境变量,指向您的adainclude
目录,
export ADA_INC=${ADA_HOME}/lib/gcc/…/adainclude
以下命令可让您查看相关来源:
view $ADA_INC/$(gnatkr Ada.Directories.ads)
view $ADA_INC/$(gnatkr Ada.Directories.adb)
请注意Current_Directory
导入为每个支持的平台编译并随分发安装的C
函数。相比之下,Containing_Directory
明确地将Windows作为特殊情况处理。
最后,您可以通过导入合适的函数或调用Spawn
和Expect
来实现任何cited方法,如Gem #54: Scripting Capabilities in GNAT (Part 2)