linux - 在 Linux 下推荐的符合 FHS 的应用程序测试/安装工作流程?

标签 linux

我正在切换到 Linux 进行开发,我对如何在我的程序中保持良好的 FHS 合规性感到困惑。

例如,在 Windows 下,我知道我的程序需要的所有资源(位图、音频数据等)都可以通过可执行文件的相对路径找到,所以如果我运行该程序也是一样的从我的开发目录或安装(例如,在“程序文件”下),该程序将能够找到它的所有文件。

现在,在 Linux 下,我看到可执行文件通常位于/usr/local/bin 下,其资源位于/usr/local/share 上。 (事实是我什至不确定这一点)

出于方便的原因(例如版本控制),我希望将与项目相关的所有文件放在同一路径下,例如,源文件为 project/src,资源文件为 project/data。

是否有任何标准或推荐的方法让我只重建用于测试的二进制文件并使用项目/数据目录中的文件,同时还能够在文件位于/usr/local/share 时找到它们?

例如,我想在/usr/local/share 下设置一个指向我的资源目录的符号链接(symbolic link),然后在我的程序中对该路径进行硬编码,但我觉得它很老套而且不太便携。

此外,我还想过运行一个安装脚本,在每次更改或添加资源时将所有资源复制到/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 --datadir=$PWD/share 是将您的构建指向源树中的数据文件的方法(用正确的路径替换)并使用类似 - AM_CFLAGS 中的 DDATADIR="'${datadir}'" 使(大概是 C)代码知道该值。 (所有这些,前提是您使用的是 autoconf/automake。类似的选项可能在其他构建系统中可用。)

这种硬编码是实践中使用的,它就足够了。对于您自己的工作副本中的开发构建,拥有硬编码路径应该不是问题,最终构建(由打包程序完成的构建)将简单地使用标准 FHS 路径。

关于linux - 在 Linux 下推荐的符合 FHS 的应用程序测试/安装工作流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4643156/

相关文章:

c++ - Windows和Linux下用C++开发的程序的区别

c++ - 如果您在进程崩溃后为其分配内存会怎样?

linux - "Couldn' t lock/home/marc/sent?”在 Mutt 中

linux - 在 Linux 中使用多进程模块时,pyinstaller 不创建工作可执行文件

linux - 两个 git 命令 gitbranch -d <branch_name> 和 gitbranch -D <branch_name> 有什么区别?

c++ - 从本地 html 文件提交表单

android - Fedora 64 位中的 Android 模拟器使用哪个 libGL?

linux - 如何安全地在Linux命令行上解压缩文件

linux - 不包括日志文件的 Zip 文件

c - valgrind:mmap(0x600000, 8192) 在 UME 中失败,错误 12(无法分配内存)