一般来说,这并没有规定应该如何完成,但 Debian 打包程序通常将应用程序数据安装在 /usr/share、/usr/lib 等的某个位置。他们还可以修补软件以使其从适当的位置读取。您可以查看Debian 政策以获取更多信息。
但是,我可以说几句话我是如何做到的。首先,我不希望在单个目录中找到文件;我首先创建一个目录列表,我在包装器中遍历fopen(). 这是我认为应该完成文件读取的顺序:
- 当前目录(显然)
~/.program-name
$(datadir)/program-name
$(datadir)是可以在 Makefile.am 中使用的变量。例子:
AM_CPPFLAGS = $(ASSERT_FLAGS) $(DEBUG_FLAGS) $(SDLGFX_FLAGS) $(OPENGL_FLAGS) -DDESTDIRS=\"$(prefix):$(datadir)/:$(datadir)/program-name/\"
这当然取决于您的输出configure以及您的configure.ac外观。
因此,只需制作一个将遍历位置并从这些目录中获取数据的包装器。类似于PATH变量的东西,除了你实现迭代。
写完这篇文章后,我注意到我需要清理我们在这个项目中的实现,但这可以作为一个好的开始。看看我们的Makefile.amfor using$(datadir)和我们的util.cppandutil.h一个简单的包装器 ( yatc_fopen())。我们也有yatc_find_file()一些第三方库正在做的情况fopen(),例如 SDL_image 或 libxml2。