是否可以在不指定 --prefix 的情况下重新运行 configure,但保留之前运行时指定的前缀?
Posted
技术标签:
【中文标题】是否可以在不指定 --prefix 的情况下重新运行 configure,但保留之前运行时指定的前缀?【英文标题】:Is it possible to re-run configure without specifying --prefix, but yet keeping the prefix specified on an earlier run? 【发布时间】:2021-07-06 17:03:14 【问题描述】:假设我正在使用自动工具为某个项目创建 Makefile,并且我经常更改 configure.ac
文件。之后,我必须更新构建文件:
/path/to/project/dir$ autoreconf -vfi
...
/path/to/project/dir$ ./configure --prefix=/home/user/.local
...
/path/to/project/dir$
我可以避免每次运行 autoreconf
时都指定 --prefix
参数吗?如果我在下次运行./configure
时简单地省略它,安装前缀将重置为/usr/local
,但我希望它保留我在第一次运行./configure
时指定的值/home/user/.local
。
注意:当然,我可以在我的.bashrc
文件中创建一个别名:
alias configure="./configure --prefix=/home/user/.local
但是,这样一来,每次我想更改项目的前缀路径时,我都必须编辑 .bashrc
文件。
注意 2: 我观察到跳过重新运行 ./configure
会使 make
运行一些 config.status
脚本,所以这应该是可能的!
【问题讨论】:
【参考方案1】:我经常更改
configure.ac
文件。之后,我必须更新构建文件
不,不一定。至少,不是手动的。如果您已经至少配置过一次项目,并且仍然有生成的 Makefile 和其他配置结果,那么每次您make
,构建系统都会自动重新构建自己并在需要时重新配置项目。
我观察到跳过重新运行
./configure
会使make
运行一些config.status
脚本,所以这应该是可能的!
确实,config.status
是由configure
编写的。它纪念configure
参数及其测试结果,它是实际构建输出文件(如makefile)的组件。它包括支持重新运行 configure
,其参数与之前的 configure
运行所使用的参数相同(当 config.status
本身构建时)。
如果您对在进行更改后重新配置时使用所有相同的configure
参数(包括宝贵的环境变量)感到满意,那么最简单的做法就是让make
处理它。在许多情况下,这将涵盖您。但是,如果您删除了您的Makefile
,或者尤其是您的config.status
,则不再提供所需的信息。除了手动删除这些文件之外,如果您make distclean
或make maintainer-clean
,您也将删除它们。
当然,如果您需要添加、删除或修改任何configure
参数,或者直接运行configure
,这也无济于事。如果您想涵盖此类情况,那么我认为没有其他替代方法可以替代您建议的别名替代方案的一般路线。我会在该类中包含一些选项,例如在项目中创建包装器或环境配置脚本,或者手动使用alias
命令添加一个仅限于当前 shell 执行上下文的别名。
【讨论】:
是的,我已经观察到,如果我在修改configure.ac
或Makefile.am
后只运行make
就会运行config.status
。但我从未见过 autoreconf
正在运行 - 如果我不手动运行它会运行吗?
@Programmer, autoreconf
可能没有运行。相反,autoconf
、automake
、autoheader
或其他特定的自动工具将根据过期的特定构建系统组件运行。以上是关于是否可以在不指定 --prefix 的情况下重新运行 configure,但保留之前运行时指定的前缀?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在不重新启动服务器的情况下在远程 weblogic 上重新部署应用程序?
是否可以在不重新启动 JSF 中的服务器的情况下更新应用程序?