我希望我的应用程序能够对make install
(distrongysconf_DATA)期间安装的配置文件进行可移植访问。是否可以通过config.h访问$(sysconfdir)
?
是的,但你不应该根据官方的声音来做这件事(就像在中一样,我现在不打算在手册中搜索它),以便继续支持为要构建的特定对象覆盖它。
make CPPFLAGS="-USYSCONFDIR -DSYSCONFDIR=/blah" thisoneobject.o
因此,一个人应该做什么:
AM_CPPFLAGS = -DSYSCONFDIR="${sysconfdir}"
如果您使用autoheader,将其添加到您的config.ac将在config.h中输出SYSCONFDIR宏,并且它将使用值$(SYSCONFDIR)或${prefix}/等进行定义。
if test "x$sysconfdir" = 'x${prefix}/etc'; then
if test "x$prefix" = 'xNONE'; then
sysconfdir=$ac_default_prefix/etc
else
sysconfdir=$prefix/etc
fi
fi
AC_DEFINE_UNQUOTED([SYSCONFDIR], ["$sysconfdir"], [location of system configuration directory])
但我强烈建议不要这样做,而是坚持使用-DSYSCONFDIR标志。它的代码更少,因此不太容易出错。在config.ac中使用我提到的条件可能不可移植,也不考虑可能遇到的每一种情况。使用-DSYSCONFDIR是最好的选择。有时候外表并不重要。
我认为最常见的是
在Makefile.am
中添加以下内容
AM_CPPFLAGS = -DSYSCONFIR='"$(sysconfdir)"'
现在您可以访问源中的SYSCONFDIR