在我的项目中,我有一组bash脚本,它们与C / C ++二进制文件一起复制到安装根目录。
问题是我必须在安装之前为每个BASH脚本运行一个命令。更具体的是,我必须用autoconf输出变量替换变量:
anyfile sed 's/ECLIPSE_PATH/@prefix@/g'
这是在Makefile.am
中定义脚本的地方 bin_SCRIPTS = file1.sh file2.sh
我想知道是否有任何标准方法可以解决这个问题。如果不是,我想来一些黑客来处理它。谢谢!
我想出了一个解决它的黑客,这是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
但我仍然想知道是否有标准的方法来做到这一点
答案 0 :(得分:6)
将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)
。