使用配置文件部署可执行文件

时间:2013-08-02 22:47:43

标签: c++ c linux gnu-make

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

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

4 个答案:

答案 0 :(得分:6)

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

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

如果它是全球性的,那么把它放在Linux上的传统地方是/ etc,例如/etc/config.file或/etc/myprogram/config.file。见Linux File System Structure。您通常会在Linux上拥有/ etc。处理文件不存在的情况与上面相同 - 没有“正确”的方法来处理它,它完全基于你想为用户制作它的方便程度。

我通常对全局配置文件执行的操作是将它们放在/ etc / wherever中安装,让程序默认从/ etc / wherever加载配置文件,还提供命令行选项来覆盖配置文件(特别适用于测试或其他情况。)

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

希望有所帮助。

答案 1 :(得分:2)

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

系统配置通常位于/etc/...的某个位置。在程序所在的同一目录中也是一个非常好的地方。

用户配置,在用户的主目录中。

组配置是最棘手的,因为您可能需要提出一种方案,其中每个“组”都有一个配置文件。 /etc/myprog/groups/<groupname>/config或类似的东西可行。

答案 2 :(得分:2)

在Linux上,配置文件的通常位置是“/ etc”,因此可以部署/etc/myprog.conf之类的配置文件。但是,这需要root权限。其他好的选择包括将配置文件放在用户的主目录中,使其类似于~/.myprog.conf~/.myprog/.conf,以使用一个文件夹,您可以在其中拥有多个配置文件,缓存或其他您想要的内容。

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

答案 3 :(得分:0)

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

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