【问题标题】:customize "make install" with automake/autotools使用 automake/autotools 自定义“make install”
【发布时间】:2016-01-05 15:53:35
【问题描述】:


我正在尝试在使用自动工具构建系统的 C++ 中创建 CGI 应用程序。此应用程序将成为我的嵌入式设备的接口。
由于make/make all 我有带有*.cgi 可执行文件的bin 目录,之前准备了html-templatesimages 目录和lighttpd 配置文件。

我需要将我的内容移动到目标设备的正确目录,即:

  • bin 中的所有 .cgi 都移动到 $(wwwdir)/cgi-bin,如果未指定 wwwdir 将是 /var/www/
  • images 目录递归到同一个 $(wwwdir) 目录
  • $(datarootdir)/$(PACKAGE_NAME) 的所有 html 模板
  • lighttpd.conf 到 $(sysconfdir)

我的程序列表定义如下:
bin_PROGRAMS=$(top_builddir)/bin/main.cgi(这里只有一个main.cgi)

有没有一种优雅的方法可以使用 configure.ac/Makefile.am 文件指定安装步骤,以便一旦用户(或其他构建系统)运行make install,所有文件都会到达它们应该到达的位置?

目前由于make install-二进制文件main.cgi登陆/usr/local/bin/

【问题讨论】:

    标签: cgi autotools autoconf automake build-system


    【解决方案1】:

    当前由于 make install - 二进制文件 main.cgi 位于 /usr/local/bin/ 中。

    是的,这是意料之中的。你可以在运行configure时设置这个,例如

    ./configure --prefix=/var/www ...
    

    应该将你的bin_PROGRAMS 安装到/var/www/bin

    在你的情况下,你需要设置更多:

    ./configure --prefix=/var/www --bindir=/var/www/cgi-bin --sysconfdir=/wherever
    

    应将datarootdir 设置为/var/www/share

    将您的 HTML 模板添加到 pkgdata_DATA 应该将它们放入 /var/www/sharePACKAGE。您可能需要为您的图像文件添加一个install hook,因为它们实际上可能也属于pkgdata_DATA,但不属于。

    将 lighttpd.conf 添加到 sysconf_DATA。我认为这涵盖了您的所有文件。

    【讨论】:

    • 问题中的PACKAGE_NAME 怎么样?在我的Makefile.am 中我使用了@datadir@/@package_name@,它被替换为${datarootdir}/@package_name@,这显然是不正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2015-09-06
    • 1970-01-01
    相关资源
    最近更新 更多