使用 Automake 为 bin_SCRIPTS 中的每个文件应用命令
Apply a command for each file in bin_SCRIPTS using Automake
在我的项目中,我有一组 bash 脚本与 C/C++ 二进制文件一起复制到安装根目录。
问题是在安装这些 BASH 脚本之前,我必须 运行 一个命令。更具体地说,我必须用 autoconf 输出变量替换一个变量:
anyfile sed 's/ECLIPSE_PATH/@prefix@/g'
这是在 Makefile.am
中定义脚本的位置
bin_SCRIPTS = file1.sh file2.sh
我想知道是否有任何标准的方法来处理这个问题。如果不是,我想用一些技巧来处理它。谢谢!
更新
我想出了一个 hack 来解决它,这是 Automake 的配方:
install-data-hook:
input_path="@prefix@"; \
path=$${input_path//\//\/}; \
for i in @bindir@/*; do \
if [[ ! `file $${i}` =~ "ELF" ]]; then \
sed -i "s/$$ECLIPSE_PATH/$${path}/g" $$i; \
fi \
done
但我还是想知道是否有标准的方法可以做到
将 autoconf 发现的变量替换到脚本中确实是一件很正常的事情。通常使用 AC_CONFIG_FILES
.
最正常的做法是给你的源文件一个.in
后缀,然后用autoconf重写成.sh
。类似于:
AC_CONFIG_FILES([script.sh:script.in], [chmod +x script.sh])
然后在源文件中,只写@whatever@
,而不是使用ECLIPSE_PATH
。
现在,我知道您想在安装时执行此操作。但是,通常这是错误的做法。在 auto* 世界中,在配置和安装时间之间更改 prefix
并不是一件好事——您必须重新配置。
如果您真的想在安装时执行此操作,那么我认为您的方法几乎足够合理。循环 bindir
的内容对您的包的用户来说是危险的——如果他们将它与其他程序一起安装到树中怎么办? IMO,最好循环 $(bin_SCRIPTS)
.
在我的项目中,我有一组 bash 脚本与 C/C++ 二进制文件一起复制到安装根目录。
问题是在安装这些 BASH 脚本之前,我必须 运行 一个命令。更具体地说,我必须用 autoconf 输出变量替换一个变量:
anyfile sed 's/ECLIPSE_PATH/@prefix@/g'
这是在 Makefile.am
中定义脚本的位置 bin_SCRIPTS = file1.sh file2.sh
我想知道是否有任何标准的方法来处理这个问题。如果不是,我想用一些技巧来处理它。谢谢!
更新
我想出了一个 hack 来解决它,这是 Automake 的配方:
install-data-hook:
input_path="@prefix@"; \
path=$${input_path//\//\/}; \
for i in @bindir@/*; do \
if [[ ! `file $${i}` =~ "ELF" ]]; then \
sed -i "s/$$ECLIPSE_PATH/$${path}/g" $$i; \
fi \
done
但我还是想知道是否有标准的方法可以做到
将 autoconf 发现的变量替换到脚本中确实是一件很正常的事情。通常使用 AC_CONFIG_FILES
.
最正常的做法是给你的源文件一个.in
后缀,然后用autoconf重写成.sh
。类似于:
AC_CONFIG_FILES([script.sh:script.in], [chmod +x script.sh])
然后在源文件中,只写@whatever@
,而不是使用ECLIPSE_PATH
。
现在,我知道您想在安装时执行此操作。但是,通常这是错误的做法。在 auto* 世界中,在配置和安装时间之间更改 prefix
并不是一件好事——您必须重新配置。
如果您真的想在安装时执行此操作,那么我认为您的方法几乎足够合理。循环 bindir
的内容对您的包的用户来说是危险的——如果他们将它与其他程序一起安装到树中怎么办? IMO,最好循环 $(bin_SCRIPTS)
.