一天数次的重装系统,一个个的软件不断的安装还有看着磁盘整理程序一点点的吃掉我硬盘上的碎片(转载时这段掐了,否则会被王垠哥哥BS)。在哪个 时候,我是一点也不允许自己的电脑出现一点的瑕疵的,从感觉分区不合理到系统的哪个小功能折腾得不好使都会成为我重装的理由。
但是,这种完美主义自从改用Linux后被打破了。当时我的教训是,在Linux上如果太过教条的话,就永远停在一个地方没办法前进了。这条经验以后证明 这种当时忽略隔后再回来弄清的做法是很有用处的。因为这条原则的核心在于“解决问题”,也就是之在乎解决问题的方法,不在乎了解问题的本质。此法对于让Linux在我电脑上短时间内霸占硬盘起了决定性的作用。但是在这以后,他却成为了我继续进步的一个块脚石。
我开始只关注一个行为的结果,比如说编译一个软件是否成功,一个程序是否顺利启动等等。我对他们的输出信息开始视而不见,当我第一天看到大门的时候我的确 不懂,但我一年后再看他们的时候我依然假设自己不懂。于是今天,当我运行忘了什么时候升级过的aclocal之后,他给了这样的信息:
/usr/share/aclocal/libmcrypt.m4:17: warning: underquoted definition of
AM_PATH_LIBMCRYPT
run info '(automake)Extending aclocal'
or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
看到这条信息我做了两条假设。第一,我安装了的软件是经过严格测试的RPM包,所以他是没有问题的;第二,我写的configure.ac中的某处肯定包 含了导致这个警告的声明。本着这两条原则,我开始参考其他开源项目的configure.ac文件并且用google搜索了一些关键词。
戏剧性的是,我甚至按照信息的提示打开了info文档浏览了粗略的一遍,但结论是可能软件包的升级要求我自己需要在configure.ac中做一些改动。于是我又一次google想找Fedora 升级的报告看看是否说明了这个情况,但是最中我什么也没有搜到。
在绕了一大圈的弯子之后,我终于决定开始认真读读出错信息了。信息明显是一个警告信息,而且前面的测试也表明我的程序也能够顺利的configure和编译运行。于是我又一次打开了他的info页,这次是认真的读了起来。
在读过之后我几乎笑了出来:
Starting with Automake 1.8, `aclocal' will warn about all
underquoted calls to `AC_DEFUN'. We realize this will annoy a lot of
people, because `aclocal' was not so strict in the past and many third
party macros are underquoted; and we have to apologize for this
temporary inconvenience. The reason we have to be stricter is that a
future implementation of `aclocal' (*note Future of aclocal::) will
have to temporary include all these third party `.m4' files, maybe
several times, even those which are not actually needed. Doing so
should alleviate many problem of the current implementation, however it
requires a stricter style from the macro authors. Hopefully it is easy
to revise the existing macros. For instance
# bad style
AC_PREREQ(2.57)
AC_DEFUN(AX_FOOBAR,
[AC_REQUIRE([AX_SOMETHING])dnl
AX_FOO
AX_BAR
])
should be rewritten as
AC_DEFUN([AX_FOOBAR],
[AC_PREREQ(2.57)dnl
AC_REQUIRE([AX_SOMETHING])dnl
AX_FOO
AX_BAR
])
程 序很明显这是一次由于预备升级前的语法风格检查严格度的提升给给出的善意的警告信息。解决的方法很简单,只要把 /usr/share/aclocal/libmcrypt.m4中的17行的“AC_DEFUN(AM_PATH_LIBMCRYPT,”改成 “AC_DEFUN([AM_PATH_LIBMCRYPT],”就不会出现警告信息了。

