大家好, 附件是对应的configure.ac。L表示行号。以下简单注解了gcc顶层目录下的configure.ac。还在完善中。欢迎评论。 谢谢 邢明杰 L38: 将运行本程序时的路径名存放在变量progname中。$0为shell脚本的名字。 L40: 如果变量PWD已经被赋值了,则可能是错的,要重新执行pwd命令对其赋值。 test -n:字符串如果不为空则为真。 ${PWDCMD-pwd}:如果PWDCMD没有被设置或者为空,则使用pwd来代替。 L42-64: 导出初始的configure参数,以供子configure们使用。 L67-69: 这些宏在acx.m4中定义 L112-177: 列出了所有可能需要的库和工具 L186-188: configdirs为所有host相关的库和工具,target_configdirs为所有target相关的库和工具,build_configdirs为所有build相关的库和工具 L225: skipdirs将存放那些需要被跳过去的目录 L227: noconfigdirs与skipdirs类似,不过会将这些目录显式的打印到终端 L229-1933: 各种条件判断,用来设置skipdirs和noconfigdirs L1935-1972: 遍历skipdirs和noconfigdirs,从configdirs,build_configdirs和target_configdirs里删除相应的目录。如果源目录下存在该相应的目录,并且只在noconfigdirs下存在,则将其放到notsupp变量中。 L1974-2001: 遍历configdirs,build_configdirs和target_configdirs,如果目录下没有configure文件,则从变量中删除相应的目录。 L2303-2323: 测试要使用的编译器是否能够生成可执行文件,如果不可以则报错。 L2326-2331: 根据host的不同,使用相应的动态库环境变量。 L2333-2340: 对于使用PATH环境变量作为动态库搜索路径的系统,做特别处理。 L2352-2378: 用来确定gdb是否需要tk/tcl。这里作者提到一个他认为可以进行改进,但又不太确定的地方。 L2401-2443: 根据是否选择了bootstrap,来调整顶层makefile。通过设定BUILD_CONFIG变量的值来完成。Makefile中会根据该变量的值来将config子目录下相应的mk文件包含进来。 L2382-2392: L2445-2497: L3199-3207: 通过extrasub_build,extrasub_host,extrasub_target来修改makeifle。它们是根据build_configdirs,configdirs,target_configdirs的内容而定义的sed语句;Makefile.in文件中有许多@if和@endif包裹的模块,这些将在生成Makefile时,通过这些sed语句选择性的进行保留和删除。