使用Automake自定义安装文件组名的配置问题
解决Automake中自定义安装文件组名的问题
嘿,刚接触Automake遇到这种配置问题很正常,我来一步步帮你搞定它!
首先得澄清一个误区:你之前用的AC_DEFINE是用来给C/C++代码定义预处理器宏的,完全不适合给Makefile传递变量;而AC_SUBST是正确的方向,但需要配合正确的变量声明和默认值设置才行。
正确的实现步骤:
1. 在configure.ac中配置GROUP变量
我们需要让用户可以通过./configure GROUP=mygroup或者直接make install GROUP=mygroup来指定组名,如果没指定就自动获取当前用户的默认主组。在configure.ac里添加以下代码:
# 声明GROUP变量,允许用户自定义,同时添加说明 AC_ARG_VAR([GROUP], [Group name for installed files (default: current user's primary group)]) # 如果用户没指定GROUP,自动获取当前用户的主组名 if test -z "${GROUP}"; then GROUP=$(id -g -n) fi # 将GROUP变量传递给Makefile.am AC_SUBST([GROUP])
2. 修正Makefile.am中的install-exec-hook规则
你之前用*是错误的,因为install-exec-hook是在源码目录执行的,不是安装后的目标目录,这样会误改源码文件的组!必须明确指定安装文件的目标路径,比如你的程序安装在$(exec_prefix)/bin,或者所有文件都安装在$(DESTDIR)$(prefix)下,示例如下:
install-exec-hook: chgrp -R $(GROUP) $(DESTDIR)$(exec_prefix)/bin # 如果需要修改所有安装文件的组,就换成$(DESTDIR)$(prefix),根据你的实际安装路径调整
3. 重新生成配置文件
修改完configure.ac和Makefile.am后,需要重新生成配置脚本和Makefile:
autoreconf -i ./configure
使用方式:
- 默认安装(用当前用户主组):
make install - 指定组安装:
make install GROUP=customgroup或者./configure GROUP=customgroup && make install
这样就能完美实现你想要的效果了!
内容的提问来源于stack exchange,提问作者Allen S. Harvey Jr.
相关产品推荐
相关产品推荐

