Automake:针对目标和工具链的不同安装

时间:2012-07-04 13:24:27

标签: makefile installation embedded autoconf automake

也许我在问一个愚蠢的问题,但有什么方法可以告诉automake在我执行“make dist”时放置我的项目包含文件,但是当我执行“make install”时却没有?

也许我的行为不正确,所以为了让我更清楚,我会告诉我需要什么。

  1. 我需要在嵌入式主板中部署我的应用程序,并在脚本中使用“make install”来创建可以复制到目标板的包。

  2. 另一方面,我希望能够使用我的库和包含文件更新我的工具链。

  3. 在第一种情况下,我不能浪费我有限的闪存,只是让应用程序运行所必需的东西。

    在第二个中,我需要有头文件,pkgconfig以及开发所需的所有东西。

    我应该如何配置我的“Makefile.am”以及预期哪些规则以便达到我的目标?

    非常感谢。

2 个答案:

答案 0 :(得分:2)

  

我只想设置一个给定的脚本SUID,其他数据文件   R / W任意权限等。

我认为添加$(DESTDIR)的makefile用户变量可以做到这一点。 由于它不是由automake定义的,“make install”使用它为空, 但是dpkg-buildpackage用“make dist”目标定义它。

(见:http://www.gnu.org/prep/standards/html_node/DESTDIR.html#DESTDIR

它帮助我管理setuid安装:

configure.ac

# Add option to disable setuid during install, use in distcheck
AC_ARG_ENABLE(setuid-install, 
 AS_HELP_STRING(
 [--disable-setuid-install       do not set setuid flags during install]), 
 [enable_setuid_install=$enableval], [enable_setuid_install="yes"])
AM_CONDITIONAL(SETUID_INSTALL, test x"$enable_setuid_install" = "xyes")

Makefile.am

if SETUID_INSTALL
install-data-hook:
        /bin/chmod 4755 $(DESTDIR)$(bindir)myBinary
endif

答案 1 :(得分:0)

我不认为autoconf真的被设计成一个通用的安装程序/卸载程序,它会给你那种控制而不至少有些痛苦。您正在寻找dpkg-buildpackagerpmbuild之类的内容,您可以将make install的输出拆分为特定的子包,以便您可以:

  • foo 适用于嵌入式主板和可能的工具链,具体取决于包中的内容(DSO,可执行文件和运行时所需的其他文件)
  • 打包工具链 foo-dev foo-devel (标题,静态库,开发所需的其他文件)。