2014-10-01 107 views
0

我试图运行应用程序,应用程序。我通过在应用程序目录中运行./app来完成此操作。这个应用程序有一个依赖,graphics/file.bmp。当我在该目录中运行./app时,一切正常。使C++应用程序使用文件目录,而不是pwd

如果我不是从父文件夹中运行,它无法找到的图形/ file.bmp当我运行./app_directory/app

什么是解决这一最干净的方式是什么?无论我在哪里运行该程序,我都想将其存入文件的目录。我在OSX上,并且会为所有unix机器上的解决方案感到兴奋。

+0

您可以使用'argv [0]'来找出应用程序实际所在的目录,然后将其附加到路径中 - 或者,如果在运行代码时无论您身在何处,都可以使用' chdir'。 – 2014-10-01 20:46:26

+0

@cdhowie - 这对我来说是一个不错的解决方案。你应该把它作为答案。 – Chet 2014-10-01 20:56:59

回答

0

您可以在main()第一行做到这一点:

chdir(dirname(argv[0])); 

dirname()删除输入中的最后一个路径组件("a/b/c"变成"a/b"),如果只有一个路径组件然后返回"."。将此返回值直接传递到chdir()将使工作目录更改为包含二进制文件的目录。

0

您可以尝试编写一个可以从任何目录运行的bash脚本,它将cd成功运行该程序的目录,但这实际上并不会改变您的终端所在的工作目录。如果你不知道该怎么做:创建一个名为build的文件(或任何你想要的),并将其放在父文件夹中。在该文件中把下面的代码:

cd app_directory 
./app 

在创建运行chmod u+x <script-name>脚本,这将使其成为一个可执行文件。一旦完成,你可以运行./<script-name>,它应该运行你的程序就好了。

相关问题