我正在尝试运行一个应用程序,应用程序。我通过在 app 目录中运行 ./app 来做到这一点。这个应用程序有一个依赖,graphics/file.bmp。当我在该目录中运行 ./app 时,一切正常。
如果我改为从父文件夹运行,则在运行 ./app_directory/app 时找不到 graphics/file.bmp
解决这个问题的最干净的方法是什么?无论我从哪里运行程序,我都想 cd 进入文件的目录。我在 OSX 上,并且会对适用于所有 unix 机器的解决方案感到兴奋。
您可以尝试编写一个可以从任何目录运行的 bash 脚本,它会 cd 进入成功运行程序的目录,但这实际上不会更改终端所在的工作目录。如果您不知道该怎么做:制作一个名为 build 的文件(或任何您想要的文件)并将其放在父文件夹中。在该文件中放入以下代码:
cd app_directory
./app
创建脚本后运行chmod u+x <script-name>
,这将使其成为可执行文件。完成此操作后,您就可以运行了./<script-name>
,它应该可以正常运行您的程序。
您可以在第一行执行此操作main()
:
chdir(dirname(argv[0]));
dirname()
从输入中删除最后一个路径组件("a/b/c"
变成"a/b"
),如果只有一个路径组件,则返回"."
。将此返回值直接传递给chdir()
会将工作目录更改为包含二进制文件的目录。