【问题标题】:Configuration files and log files installation with automake使用 automake 安装配置文件和日志文件
【发布时间】:2011-11-03 15:58:37
【问题描述】:

假设我有一个这样的项目:

(dev dir)
- README
- INSTALL
/ src
  - blah.cpp
  - blah.hpp
/ conf
  - blah_one.xml
  - blah_two.xml

我制作了一个 configure.ac 和 Makefile.am 来在 (/usr/local)/bin 下安装二进制文件。 configure.ac 类似于:

AC_INIT([blah], [0.1])
AC_PREREQ([2.67])
AM_INIT_AUTOMAKE([1.11])
AC_CONFIG_SRCDIR([src/blah.cpp])
AC_PROG_CXX
AC_LANG([C++])
AC_HEADER_STDC
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([src/Makefile])
AC_OUTPUT

... Makefile 类似于

SUBDIRS = src

...和 ​​src/Makefile.am 类似

bin_PROGRAMS = blah
blah_SOURCES = blah.cpp blah.hpp

一切正常,“make install”正确安装二进制文件到 (/usr/local)/bin 下。

现在:

我想扩展这些以使命令“make install”(在配置、构建等之后)在 /etc/blah 下安装配置文件 blah_one.xml 和 blah_two.xml,并在 / 下“准备”一个日志目录var/log/blah/

正确的做法是什么?

【问题讨论】:

    标签: automake


    【解决方案1】:

    好吧,我会这样做:

    blahconfdir=$(sysconfdir)/blah
    blahconf_DATA = blah_one.xml blah_two.xml
    blahlogdir = $(localstatedir)/log/blah
    

    那么当你配置时:

    ./configure --sysconfdir=/etc --localstatedir=/var
    

    如果不知道“准备”步骤的详细信息,就很难知道需要发生什么,以及如何让它发生。

    【讨论】:

    • 在“正常”的 linux 系统上假设 sysconfdir = /etc 和 localstatedir = /var 是否正确,并避免使用这些开关?
    • 您必须设置它们或发明一些目录,否则它们将安装在前缀目录(/usr/local)下。
    • 指定 --prefix=/ 来避免这种情况还不够吗?
    • 如果你愿意。您的 bin 文件将安装在 /bin 中,而不是 /usr/bin。
    • autotools 哲学规定所有文件都安装在 $prefix 下,除非用户另有指定,因此需要指定 sysconfdir 和 localstatedir。如果您使用的是包管理系统,您可以将开关放在构建文件中(例如,*.spec 或 debian/rules)。您还可以在 /usr/local/config.site 中指定 sysconfdir 和 localstatedir。如果您将包构建为始终将文件安装在 /etc 中,那么您就违反了约定。
    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 2023-03-25
    • 2011-05-15
    • 2012-05-30
    • 2011-07-31
    • 1970-01-01
    • 2013-07-21
    • 2020-02-03
    相关资源
    最近更新 更多