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

时间:2011-05-11 04:19:32

标签: makefile gnu autotools configure autoconf

做一个GNU风格的“ ./ configure,make,and install ” - 带有特定的选项,标志等......众所周知,有时候这可能是一种黑色艺术......对一件软件起作用的东西可能不适合任何其他......

现在,想象一下您已经成功构建了一些包 XYZ.app 并带有一些选项,如...

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

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

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

我确信这些东西都埋藏在所有config.xxxx或AClocal或Makefile.xx文件中,但对于我的生活,我还没有能够直接回答Google。

% 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" *

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

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

4 个答案:

答案 0 :(得分:13)

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

我有点希望他们能够更容易地做到这一点。曾几何时head config.status可以获得原始的configure命令。 ./config.status --rerun extra args here会很好。

答案 1 :(得分:12)

令人难以置信的是,其他所有人都错过了这样做的规范方式,这种方式自该线程开始之前已经存在了2年。

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

几天后,在闲置浏览Autoconf的发行说明时,我达到the release notes for Autoconf 2.65。你会相信吗?

  

Autoconf 2.65(2009-11-21)[稳定]

的主要变化      

[...]

     

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

因此,只需运行./config.status --config就可以完成OP所要求的目标。

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

  

--config

     

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

args=`build-dir/config.status --config`
eval src-dir/configure "$args" CFLAGS=-g --srcdir=src-dir

答案 2 :(得分:4)

我无法相信没人提到config.log - 它可以为您提供您正在寻找的内容:

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

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

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

答案 3 :(得分:2)

如果您仍然拥有构建树,请运行./config.status --recheck,然后快速按CTRL-C,因为它会在重新运行configure之前打印出它将运行的内容。