使用configuration文件部署可执行文件

我不熟悉在Linux上部署用C / C ++编写的程序,我想知道在这种情况下你会做什么。

我有一个二进制文件(用GNU Make编译)需要读取一个configuration文件(如myprogram.conf )。 但是当我编写一个Makefile文件将这个文件部署到/usr/bin/ ,configuration文件应该放在哪里? 那么可执行文件如何知道它在哪里?

你有无尽的选择,但最好的方法取决于几件事情。 首先,它是一个用户特定的配置文件,还是所有用户都是全局的?

如果是用户特定的,例如,可以将其保存在〜/ .myprogram / config.file中,并在那里检查程序。 作为对用户的一项服务,如果没有找到,可以决定做什么 – 也许可以从其他地方复制默认配置,或者生成默认配置,或使用硬编码的默认选项,或显示配置向导,或者只是失败。 这完全取决于你。

如果是全局的,传统的放在Linux上的地方是/ etc,例如/etc/config.file或/etc/myprogram/config.file。 请参阅Linux文件系统结构 。 你通常会在Linux上有一个/ etc。 处理文件不存在的情况与上面相同 – 没有“正确”的方式来处理,完全基于您想为用户创建的方便程度。

我通常对全局配置文件所做的事情是把它们放在/ etc /无论安装在哪里,程序默认从/ etc / etc中加载配置文件,但也提供一个命令行选项覆盖配置文件(对于测试或其他情况)。

我通常做的处理丢失的配置文件完全取决于应用程序。 我通常要么有硬编码的默认值(如果这是合适的),要么简单地失败,并引导用户描述一个配置文件的文档(在我的安装程序安装配置文件的情况下,我觉得这是足够的)。

希望有所帮助。

它的种类取决于配置参数是什么,以及它们是“每个系统”还是“每个用户”或“每个组”还是…

系统配置通常驻留在/etc/... 。 在程序所在的同一个目录中也是一个很好的地方。

用户配置,位于用户的主目录中。

组配置是最棘手的,因为你可能需要提出一个方案,每个“组”有一个配置文件。 /etc/myprog/groups/<groupname>/config或类似的工作。

在Linux上,配置文件的常用位置是“/ etc”,因此可以使用像/etc/myprog.conf这样的配置文件。 这需要root权限。 其他好的选择包括把一个配置文件放在用户的主目录下,使之类似~/.myprog.conf~/.myprog/.conf来使用一个文件夹,你可以有几个配置文件,一个缓存或其他的东西你要。

至于如何可执行文件知道文件在哪里,一个解决方案是在几个常见的位置查找文件。 例如,如果您决定将您的配置放置在用户的主目录中,请先查找它,如果找不到,请在/etc下查找。 并允许一个特殊的命令行参数,让不同的配置文件被加载。 因此,调用myprog可以检查home文件夹中的配置文件,但myprog -c /some/path/config将使用/some/path/config作为文件。 如果没有任何有效的配置文件,那么有一些默认设置可以回退,这也是一个好主意。

配置文件可以去任何地方,但我会尝试把它放在与程序将读取或写入的任何其他文件相同的目录中。

至于可执行文件如何找到它,我会将命令行中配置文件的路径作为参数传递给可执行文件,默认值为“。”。 (这是当前目录,是您启动可执行文件时所在的目录)。