gcc 使用 autoconf 时无法识别命令行选项‘-V’和‘-qversion’

gcc 使用 autoconf 时无法识别命令行选项‘-V’和‘-qversion’

使用 gcc 4.7.2 和 autoconf 2.69 进行编译时,我经常在 configure.log 中得到如下结果。例如:

configure:3091: $? = 0 
configure:3080: gcc -V >&5 
gcc: error: unrecognized command line option '-V' 
gcc: fatal error: no input files compilation terminated. 
configure:3091: $? = 1 
configure:3080: gcc -qversion >&5 
gcc: error: unrecognized command line option '-qversion' 
gcc: fatal error: no input files compilation terminated. 
configure:3091: $? = 1 
configure:3111: checking whether the C compiler works 
configure:3133: gcc -march=x86-64 -mtune=generic -Os -pipe -Wl,-O1 conftest.c >&5
configure:3137: $? = 0 
configure:3185: result: yes

编译成功进行,但我想知道为什么 autoconf 会测试 gcc 不支持的命令行。这适用于其他编译器吗?

答案1

引用此:

gcc -V 是一种在您拥有多个 gcc 版本时选择特定 gcc 版本的方法,但在这里这是一个诱饵:configure 正在遍历一组选项(--version -v -V 等)以确保它可以记录 C 编译器的版本,无论是 gcc 还是其他什么。

引用此:

gcc 以前有一个 -V 选项用于版本报告。现在它使用 -v,并提供编译器构建时使用的配置选项。

您的包裹有点过时了,没有反映出这个事实。

顺便说一句,-qversion 选项已合并到 -v 中……

引用此:

在某些版本的 gcc 中,-V 选项会指示它使用指定版本的编译器 - 但需要一个参数。它在此处有记录。该选项似乎在 4.5.4 和 4.6.4 之间的某个时间被删除了。

引用这个:

答案2

现代 autoconf 版本 2.69 可与以下扩展编译器信息提取方法一起使用:

# Provide some information about the compiler.
$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
for ac_option in --version -v -V -qversion; do
  { { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
  *) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
  ac_status=$?
  if test -s conftest.err; then
    sed '10a\
... rest of stderr output deleted ...
         10q' conftest.err >conftest.er1
    cat conftest.er1 >&5
    rm -f conftest.er1 conftest.err
  fi
  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
  if test $ac_status = 0; then break; fi}
done

它已经适应尝试现代和旧版本的提取标志。修复在最后一行,允许在第一次成功后跳过测试。

相关内容