我想编写一个unix / linux程序,它将使用配置文件。
我的问题是,我应该在哪里放置文件的位置?
我可以将位置(如/etc
)“硬编码”到程序本身。
但是,我希望如果没有权限的用户可以在其他地方安装它(通过make),例如~
。
makefile是否应该编辑源代码?或者它通常以不同的方式完成?
答案 0 :(得分:6)
创建一些默认值:
/etc/appname
~/.appname
然后,如果要允许覆盖这些,请让应用程序检查环境变量。例如
$app_userconfig
$app_config
其中包含覆盖路径/文件名。
最后添加一个命令行选项,允许在运行时指定配置,例如
-c | --config {filename}
答案 1 :(得分:1)
将/ etc / prgname下的全局配置文件保留为标准。同时允许个人用户的.local配置文件覆盖全局设置将允许每个用户根据自己的喜好个性化程序。
答案 2 :(得分:1)
通常使用一系列地点来获取位置:
./program -C path/to/config/file.cfg
)。char *path_to_config = getenv("PROGRAMCONFIG");
)。stat("./program.cfg")
或构建一个strig来指定“$ HOME / .program / config.cfg”或“$ HOME / .program.cfg”和{{ 1}}那个。。stat
)。答案 3 :(得分:0)
正如斯卡弗曼所说,配置文件之类的规范位置在FHS中指定。似乎有一个约定,即程序将从运行它的目录中读取配置文件,以替代硬编码位置中的配置文件。您可能希望考虑添加一个命令行开关,允许用户指定备用配置文件位置。
答案 4 :(得分:0)
makefile不应直接修改源,但可以通过-D
选项将文件夹路径/名称传递给编译器。处理它的一种方法是将DEFAULT_PATH之类的#define作为默认安装路径。如果用户想要定义路径,则makefile会将-DUSER_PATH=whatever
添加到编译器选项中。您可以编写代码以使用USER_PATH(如果存在),否则使用DEFAULT_PATH。