当使用 autotools 构建系统并安装时,make install
如何避免破坏现有的配置文件?
我已经定义了一个配置文件,如下Makefile.am
所示:
dist_sysconf_DATA = $(top_srcdir)/server.conf
如何以make install
不会破坏现有版本的方式定义数据文件?
答案1
您可以使安装目标不复制该文件(如果该文件已存在),或者以不同的名称复制该文件。这是一个例子人数据库。
# We deliberately leave the configuration file in place on uninstall, since
# it may contain local customisations.
distuninstallcheck_listfiles = \
find . -type f -print | grep -v 'etc/man_db\.conf'
noinst_DATA = man_db.conf
install-data-hook:
@if test -f $(DESTDIR)$(config_file); then \
echo "$(DESTDIR)$(config_file) already exists; overwrite manuall
else \
test -z "$(config_file_dirname)" || $(MKDIR_P) "$(DESTDIR)$(conf
echo " $(INSTALL_DATA) man_db.conf $(DESTDIR)$(config_file)"; \
$(INSTALL_DATA) man_db.conf $(DESTDIR)$(config_file); \
fi
但最好的办法是严格区分已安装的文件和用户自定义,以便用户永远不必更改分布式文件。让您的应用程序从/etc/myapp.conf
和读取其配置/usr/share/myapp/default.conf
,以便下的空文件/etc
会导致默认行为和设置/etc
覆盖下的默认行为和设置/usr
。