automake - 如何更改已安装二进制文件的权限
automake - how to change permissions to an installed binary
我有这个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)
我错过了什么??
您没有说明您是如何配置的,也没有说明您用于 make install
的确切命令。这很重要,原因有二:
Automake 支持在安装时通过配置的 --program-prefix
和相关选项重命名文件;
Automake 支持在安装时设置 DESTDIR
。
所以也许其中之一正在产生影响。
修复重命名问题有点复杂 -- 请参阅 Autoconf 文档 -- 但处理 DESTDIR
至少很简单:
install-exec-hook:
chmod +s $(DESTDIR)$(sbindir)/foo
注意两个变量之间缺少目录分隔符。那是故意的。
如果这没有帮助,那么您需要更早地进行调查以找出该奇怪前缀的来源。我不相信 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)
我错过了什么??
您没有说明您是如何配置的,也没有说明您用于 make install
的确切命令。这很重要,原因有二:
Automake 支持在安装时通过配置的
--program-prefix
和相关选项重命名文件;Automake 支持在安装时设置
DESTDIR
。
所以也许其中之一正在产生影响。
修复重命名问题有点复杂 -- 请参阅 Autoconf 文档 -- 但处理 DESTDIR
至少很简单:
install-exec-hook:
chmod +s $(DESTDIR)$(sbindir)/foo
注意两个变量之间缺少目录分隔符。那是故意的。
如果这没有帮助,那么您需要更早地进行调查以找出该奇怪前缀的来源。我不相信 Automake 中有任何东西可以添加它。