我正在切换到
Linux进行开发,我很困惑如何在我的程序中保持良好的FHS合规性.
例如,在Windows下,我知道我的程序需要的所有资源(位图,音频数据等)都可以通过可执行文件的相对路径找到,所以如果我从我的开发中运行程序,它也是一样的目录,或从安装(例如,在“程序文件”下),程序将能够找到其所有文件.
现在,在Linux下,我看到通常可执行文件位于/usr/local/bin下,其资源位于/usr/local/share上. (事实上,我甚至不确定这一点)
出于方便的原因(例如版本控制),我希望将所有与项目相关的文件放在相同的路径下,例如,项目/ src用于源和项目/数据用于资源文件.
是否有任何标准或推荐的方法让我只重建二进制文件以测试和使用项目/数据目录中的文件,同时还能够在/usr/local/share下找到文件?
我想例如在/usr/local/share下设置指向我的资源目录的符号链接,然后在我的程序中硬编码该路径,但我觉得它非常hackish并且不太便携.
另外,我想过运行一个安装脚本,每次更改或添加资源时都会将所有资源复制到/usr/local/share,但我也觉得这不是一个好方法.
任何人都可以告诉我或指出我告诉我这个问题通常如何解决的地方?
谢谢!
最佳答案
For convenience reasons (such as version control) I’d like to have all the files pertaining to the project under a same path, say, for example, project/src for the source and project/data for resource files.
您可以根据需要组织源树 – 它不需要与所安装软件所需的FHS布局有任何相似之处.
I see that usually the executable goes under /usr/local/bin and its resources on /usr/local/share. (And the truth is that I’m not even sure of this)
标准前缀是/ usr. /usr/local适用于FHS规范重申的“本地安装”.
Is there any standard or recommended way to let me just rebuild the binary for testing and use the files on the project/data directory
当然.例如,运行./configure –dadadir = $PWD / share是将构建指向源树的数据文件(用适当的路径替换)并使用类似-DDATADIR =“’${datadir}’”的方法在AM_CFLAGS中使(可能是C)代码知道值. (所有这些,只要您使用autoconf / automake.其他构建系统中可能有类似的选项.)
这种硬编码是在实践中使用的,它就足够了.对于您自己的工作副本中的开发构建,具有硬编码路径应该不是问题,并且最终构建(由打包程序完成)将仅使用标准FHS路径.