通过config.h可移植地访问sysconfdir
我希望我的应用程序能够对在通过config.h可移植地访问sysconfdir,c,portability,automake,system-configuration,C,Portability,Automake,System Configuration,我希望我的应用程序能够对在makeinstall(dist\u sysconf\u数据)期间安装的配置文件进行便携访问。可以通过config.h访问$(sysconfdir)吗?是的,但是根据官方的声音,您不应该这样做(就像,我现在不打算在手册中搜索它),以便继续支持为要构建的特定对象覆盖它 make CPPFLAGS="-USYSCONFDIR -DSYSCONFDIR=/blah" thisoneobject.o 因此,我们应该做的是: AM_CPPFLAGS = -DSYSCONFDIR
makeinstall
(dist\u sysconf\u数据)期间安装的配置文件进行便携访问。可以通过config.h访问$(sysconfdir)
吗?是的,但是根据官方的声音,您不应该这样做(就像,我现在不打算在手册中搜索它),以便继续支持为要构建的特定对象覆盖它
make CPPFLAGS="-USYSCONFDIR -DSYSCONFDIR=/blah" thisoneobject.o
因此,我们应该做的是:
AM_CPPFLAGS = -DSYSCONFDIR=\"${sysconfdir}\"
是的,但是你不应该根据官方的声音这样做(比如,我现在不打算在手册中搜索它),以便继续支持为要构建的特定对象覆盖它
make CPPFLAGS="-USYSCONFDIR -DSYSCONFDIR=/blah" thisoneobject.o
因此,我们应该做的是:
AM_CPPFLAGS = -DSYSCONFDIR=\"${sysconfdir}\"
我相信最常做的事(我就是这么做的) 在
Makefile.am中添加以下内容
AM\u CPPFLAGS=-DSYSCONFIR='“$(sysconfdir)””
现在您可以访问源代码中的SYSCONFDIR
,我认为最常用的方法(我就是这么做的)
在Makefile.am中添加以下内容
AM\u CPPFLAGS=-DSYSCONFIR='“$(sysconfdir)””
现在,如果您使用的是autoheader,那么您可以访问source中的SYSCONFDIR
,将其添加到configure.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标志。它的代码更少,因此更不容易出错。在configure.ac中使用我提到的条件可能不是可移植的,也不会考虑可能遇到的每种情况。使用-DSYSCONFDIR是最好的选择。有时外观并不重要。如果使用autoheader,将其添加到configure.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标志。它的代码更少,因此更不容易出错。在configure.ac中使用我提到的条件可能不是可移植的,也不会考虑可能遇到的每种情况。使用-DSYSCONFDIR是最好的选择。有时,外观并不重要。我可能不够清楚,我没有试图强制设置位置,只是可以访问安装时设置的内容。很像PACKAGE\u VERSION
是通过config提供的。我想是这一部分:@JackKelly:No,它是autoconf.info第4.8.2节安装目录变量:“例如,不要试图在configure
中评估datadir
并使用AC\u DEFINE\u UNQUOTED([datadir])在makefile中硬编码它[“$datadir”],[Data directory.])
,您应该添加-DDATADIR='$(datadir)
”-D标志属于CPPFLAGS,而不是CFLAGSI可能不够清晰,我没有试图强制设置位置,只是可以访问安装时设置的内容。很像PACKAGE\u VERSION
可以通过config获得。我想是这一部分:@JackKelly:不,这是autoconf.info第4.8.2节安装目录变量:“例如,不要尝试在配置中计算datadir
,并在makefile中使用例如acdefine\u UNQUOTED([datadir],“$datadir”],[Data directory.])
,而应该添加-DDATADIR='$(datadir)
-D标志属于CPPFagas,而不是CFLAGS。”