是否可以在不指定 --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 distcleanmake maintainer-clean,您也将删除它们。

当然,如果您需要添加、删除或修改任何configure 参数,或者直接运行configure,这也无济于事。如果您想涵盖此类情况,那么我认为没有其他替代方法可以替代您建议的别名替代方案的一般路线。我会在该类中包含一些选项,例如在项目中创建包装器或环境配置脚本,或者手动使用alias 命令添加一个仅限于当前 shell 执行上下文的别名。

【讨论】:

是的,我已经观察到,如果我在修改configure.acMakefile.am 后只运行make 就会运行config.status。但我从未见过 autoreconf 正在运行 - 如果我不手动运行它会运行吗? @Programmer, autoreconf 可能没有运行。相反,autoconfautomakeautoheader 或其他特定的自动工具将根据过期的特定构建系统组件运行。

以上是关于是否可以在不指定 --prefix 的情况下重新运行 configure,但保留之前运行时指定的前缀?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不重新编译的情况下使科尔多瓦应用程序可调试?

是否可以在不重新启动服务器的情况下在远程 weblogic 上重新部署应用程序?

是否可以在不重新启动 JSF 中的服务器的情况下更新应用程序?

是否可以在不指定类型的情况下将变量值打印到调试?

是否可以在不重新加载页面的情况下更新 django 上下文字典?

DDS QoS:是不是可以在不指定密钥的情况下发送数据?