我的项目使用GNU Autotools进行构建和安装。其中一些文件引用了程序包中的其他文件,我希望这些引用在用户安装程序的任何地方都得到尊重。我不知道他们是否要安装到/etc
,/usr/local/etc
或什么版本。
我试图在AC_CONFIG_FILES
时使用./configure
来替代autoconf的变量。
# install.in
MY_APP=@libexecdir@/my-app.sh
# sssd.conf.in
ldap_tls_cacert = @sysconfdir@/my-app/cacert.pem
ldap_tls_cert = @sysconfdir@/my-app/client.crt
# configure.ac
AC_CONFIG_FILES([Makefile install sssd.conf]
结果:
# install
MY_APP=${exec_prefix}/libexec/my-app.sh
# sssd.conf
ldap_tls_cacert = ${prefix}/etc/my-app/cacert.pem
ldap_tls_cert = ${prefix}/etc/my-app/client.crt
那还不行。已执行替换,但是留下了${prefix}
和${exec_prefix}
。
那是我意识到安装位置isn't just controlled by ./configure --prefix=
, but also by make install prefix=...
的时候。用户在运行make install
时可以更改安装位置,这意味着仅依靠AC_CONFIG_FILES
不会削减安装位置。
问题:如何在没有${prefix}
和${exec_prefix}
变量的情况下替换完整路径?
我可以添加一些内容到Makefile.am
吗?我不应该使用AC_CONFIG_FILES
吗?我认为这是GNU世界中一个常见且已解决的问题,只是我的google-fu使我失望了。