automake - 如何更改已安装二进制文件的权限

时间:2015-01-28 14:11:35

标签: autotools automake

我有这个Makefile.am:

AUTOMAKE_OPTIONS = subdir-objects
sbin_PROGRAMS = foo
foo_SOURCES = foo.c

install-exec-hook:
    chmod +s $(sbindir)/foo
除了目标 distcheck 之外,一切都运行良好,这会产生此错误:

> make distcheck
...
...
...
Making install in sub-module
make[2]: Entering directory '/home/users/a/myproj/_build/sub-module'
make[3]: Entering directory '/home/users/a/myproj/_build/sub-module'
 ../../install-sh -c -d '/var/folders/pp/jbr_vq091s7gd8x9scrc7drw0000gn/T//am-dc-71151//home/users/a/myproj/_inst/sbin'
    /bin/sh ../libtool   --mode=install /usr/bin/install -c foo '/var/folders/pp/jbr_vq091s7gd8x9scrc7drw0000gn/T//am-dc-71151//home/users/a/myproj/_inst/sbin'
libtool: install: /usr/bin/install -c foo /var/folders/pp/jbr_vq091s7gd8x9scrc7drw0000gn/T//am-dc-71151//home/users/a/myproj/_inst/sbin/foo
make  install-exec-hook
make[4]: Entering directory '/home/users/a/myproj/_build/sub-module'
chmod +s /home/users/a/myproj/_inst/sbin/foo
chmod: /home/users/a/myproj/_inst/sbin/foo: No such file or directory
Makefile:645: recipe for target 'install-exec-hook' failed
make[4]: *** [install-exec-hook] Error 1

看起来 foo 二进制文件被复制到某个临时目录(/ var / folders / pp / jbr_vq091s7gd8x9scrc7drw0000gn / T // am-dc-71151 // home / users / a / myproj / _inst / sbin)而不是在install-exec-hook目标中查看的位置(/ home / users / a / myproj / _inst / sbin)

我错过了什么?

1 个答案:

答案 0 :(得分:1)

您没有说明您的配置方式或您用于make install的确切命令。这有两个原因:

  1. Automake支持在安装时通过配置--program-prefix及相关选项重命名文件;

  2. Automake支持在安装时设置DESTDIR

  3. 所以也许其中一个有效果。

    修复重命名问题有点涉及 - 请参阅Autoconf文档 - 但至少处理DESTDIR很简单:

    install-exec-hook:
           chmod +s $(DESTDIR)$(sbindir)/foo
    

    注意两个变量之间缺少目录分隔符。这是故意的。

    如果这没有帮助,那么您需要先调查一下,找出奇怪前缀的来源。我不相信Automake中有任何可以添加它的东西。