Opciones de línea de comando no reconocidas de gcc '-V' y '-qversion' con autoconf

15

Al compilar con gcc 4.7.2 y autoconf 2.69, obtengo resultados como estos en configure.log. Ejemplo:

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

La compilación continúa con éxito, pero me pregunto por qué autoconf está probando las líneas de comando que gcc no admite. ¿Es esto para otros compiladores?

syrinx
fuente

Respuestas:

11

Citando esto:

gcc -V es una forma de seleccionar una versión específica de gcc cuando tienes más de una, eso es un señuelo aquí: configure está iterando a través de un conjunto de opciones (--version -v -V, etc.) para asegurarte de que pueda iniciar sesión la versión del compilador de C, ya sea gcc u otra cosa.

Citando esto:

gcc solía tener una opción -V para los informes de versión. Ahora usa -v y proporciona las opciones de configuración utilizadas cuando se compiló el compilador.

Su paquete está un poco anticuado y no refleja ese hecho.

Por cierto, la opción -qversion se fusionó en -v ...

Citando esto:

En algunas versiones de gcc, la opción -V le dice que use una versión específica del compilador, pero requiere un argumento. Está documentado aquí. La opción parece haberse eliminado en algún momento entre 4.5.4 y 4.6.4.

que hace referencia a esto:

lluvia constante
fuente
1

La versión 2.69 moderna de autoconf podría usarse con el siguiente método extendido de extracción de información del compilador:

# 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

Ya está adaptado para probar banderas de extracción de versiones modernas y heredadas. La solución está en la última línea, lo que permite omitir las pruebas después del primer éxito.

Oleg Kokorin
fuente
"G-Man dice 'Reinstate Monica'" roba mi edición. Debería darte vergüenza.
okwap