gcc nicht erkannte Befehlszeilenoptionen '-V' und '-qversion' mit Autoconf

13

Beim Kompilieren mit gcc 4.7.2 und autoconf 2.69 erhalte ich routinemäßig Ergebnisse wie diese in configure.log. Beispiel:

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

Die Kompilierung wird erfolgreich fortgesetzt, aber ich frage mich, warum autoconf auf Befehlszeilen testet, die gcc nicht unterstützt. Ist das für andere Compiler?

Syrinx
quelle

Antworten:

11

Unter Berufung auf Folgendes:

gcc -V ist eine Möglichkeit, eine bestimmte gcc-Version auszuwählen, wenn Sie mehr als eine haben. Dies ist hier jedoch ein Köder: configure durchläuft eine Reihe von Optionen (--version -v -V usw.), um sicherzustellen, dass sie protokolliert werden können die Version des C-Compilers, sei es gcc oder etwas anderes.

Unter Berufung auf Folgendes:

gcc hatte früher eine -V-Option für Versionsberichte. Es verwendet jetzt -v und bietet die Konfigurationsoptionen, die beim Erstellen des Compilers verwendet wurden.

Ihr Paket ist etwas veraltet und spiegelt diese Tatsache nicht wider.

Übrigens wurde die Option -qversion in die Option -v ...

Unter Berufung auf Folgendes:

In einigen Versionen von gcc weist die Option -V an, eine bestimmte Version des Compilers zu verwenden, erfordert jedoch ein Argument. Es ist hier dokumentiert. Die Option scheint einige Zeit zwischen 4.5.4 und 4.6.4 entfernt worden zu sein.

was darauf verweist:

stetiger Regen
quelle
1

Die moderne Autoconf-Version 2.69 kann mit der folgenden erweiterten Extraktionsmethode für Compilerinformationen verwendet werden:

# 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

Es ist bereits angepasst, um sowohl Extraktionsflags für moderne als auch für ältere Versionen zu testen. Das Update befindet sich in der allerletzten Zeile und ermöglicht das Überspringen von Tests nach dem ersten Erfolg.

Oleg Kokorin
quelle
"G-Man sagt 'Reinstate Monica'" stiehlt meine Bearbeitung. Schäm dich.
Okwap