你如何"回应"源目录中的最后一次configure/make build --options?

Ale*_*ray 18 autoconf gnu makefile autotools configure

做AA GNU风格" 的./configure,make,并安装 " -与特定选项,标记,等...大家都知道,有时这可能是一个黑色的艺术..和什么工作的一个软件可不是为了任何其他......

现在,假设您已经成功构建了一些包XYZ.app,其中包含一些选项,如...

% ./configure --with-1=2 USFLAG="-3 four" OBSCURE_LIB=l/lib/doihave

继续使用它.大.稍后,您意识到您需要先前省略的编译时选项,或者您已经解决了依赖性问题等等...... 无论出于何种原因,您希望重新编译这个非常好的二进制文件.

现在...... 你怎么能"回忆"你传递给./configure的所有选项,逐字,以便使用那些SAME选项,同时可能增加或减少一些,这次呢?

我确信这些东西都埋在了所有那些config.xxxx或AClocal或Makefile.xx文件的某个地方,但对于我的生活,我还没有能够谷歌直接回答.

% file /usr/bin/$1 -->  Mach-O 64-bit executable x86_64
% ld /usr/bin/$1   -->  -macosx_version_min not specificed, assuming 10.6
% make -d          -->  * 20 pages of Makefile nonsense.... *
% ./config.log     -->  * shows some history, but nothing interesting. *
% ./config.status  -->  * does a strange sequence oddly similar to a "clean" *
% ./configure -h   -->  * 500 options, none of which is "show-me=your-shit" *
Run Code Online (Sandbox Code Playgroud)

glibtoolize,otool,autoconf,automake,pkg-config ...似乎都不愿意提供帮助.一个close-call似乎是pkg-config创建的XYZ.pc文件的内容.

prefix=/usr/local  \  exec_prefix=${prefix}  \  libdir=${exec_prefix}/lib
includedir=${prefix}/include  \  Libs: -L${libdir} -lxyz-base 
Cflags: -I${includedir} -I${includedir}/xyz
Run Code Online (Sandbox Code Playgroud)

然而,这些似乎只是环境变量,而不是来自实际配置调用的参数...... 我厌倦了猜测......找出原始构建参数的真正方法是什么,以便您可以再次使用它们,将...?

und*_*e_d 14

令人难以置信的是,其他所有人都错过了规范的方式来做这件事,这个方法已经开始了2年之前.

我想知道与OP相同的事情,并且当我读到这个帖子时缺乏适当的(非丑陋的)方法令我感到失望.

几天后,在闲置浏览Autoconf 的发行说明时,我找到了Autoconf 2.65的发行说明.你会相信吗?

Autoconf 2.65的主要变化(2009-11-21)[稳定]

[...]

config.status现在提供了一个--config选项来生成配置.

因此,正好运行./config.status --config正是OP所要求的.

以下是文档中的相应参考:17 config.status调用和引用:

--config

以可重复使用的方式打印配置设置,为shell引用,然后退出.例如,对于调试版本,否则将重用src-dir中包的不同构建目录build-dir中的配置,您可以使用以下命令:

args=`build-dir/config.status --config`
eval src-dir/configure "$args" CFLAGS=-g --srcdir=src-dir
Run Code Online (Sandbox Code Playgroud)

  • 我认为这应该是正确的答案。直截了当地问OP。 (2认同)

gee*_*aur 13

config.status有选择权; ./config.status --recheck重新运行configure原始选项.您可以中断该命令并重新发出该命令(它将在运行之前显示该命令),或者您可以编辑config.status并添加新参数$ac_configure_extra_args.

我有点希望他们能够更轻松地做到这一点.曾几何时head config.status会得到你原来的configure命令. ./config.status --rerun extra args here本来不错的.

  • 在你最喜欢的编辑器中打开它并搜索第二次出现的字符串`./configure`; 该行,以及紧接在之前的'ac_configure_extra_args`的设置(我在这里可以方便地获得的示例中的2行)是设置所在的位置.(它们将根据所使用的`autoconf`版本移动.非常旧的将在脚本的前几行中的注释中重现`configure`命令行.)至于"他们",[GNU` autoconf`项目页面](http://savannah.gnu.org/projects/autoconf)记录主要维护者和贡献者. (3认同)
  • 我在我的机器上打开了一个随机的`config.status` ......它是2,600行 - 和84,325个字符的虚拟gobbledygook.我相信你,信息可能在那里......但在哪里?我想知道**我之前做了什么**,之前有效......并没有改变任何我不需要的东西,与之前的设置相矛盾,顺便说一下,我不是故意离题,但谁是_they_,真的,(你提到过)?在没有查找的情况下,gnu"人"仅存在于我的脑海中,作为一些准神话,ram-shepharding,老年人 - 拒绝停止使用Netscape 3.0等. (2认同)

小智 5

我不敢相信没有人提到 config.log - 它为您提供了您正在寻找的内容:

该文件包含编译器在运行 configure 时产生的任何消息,以在 configure 出错时帮助调试。

它是由 configure 创建的,它是由 GNU Autoconf 2.69 生成的。调用命令行是

$ ./configure --prefix /usr/local/syslog-ng/ --enable-linux-caps --enable-spoof-source