gcc нерозпізнані параметри командного рядка '-V' та '-qversion' з autoconf


16

Під час компіляції з 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 не підтримує. Це для інших компіляторів?

Відповіді:


11

Цитуючи це:

gcc -V - це спосіб вибору певної версії gcc, коли у вас є більше однієї, це тут є приманкою: конфігурація є ітерацією через набір параметрів (--version -v -V тощо), щоб переконатися, що вона може ввійти версія компілятора C, будь то gcc або щось інше.

Цитуючи це:

gcc використовував параметр -V для звітів про версії. Тепер він використовує -v і надає параметри конфігурації, які використовувались при побудові компілятора.

У вас пакет трохи датовий і не відображає цього факту.

До речі, варіант -verver був об'єднаний у -v ...

Цитуючи це:

У деяких версіях gcc опція -V вказує їй використовувати вказану версію компілятора - але для цього потрібен аргумент. Це задокументовано тут. Здається, цей варіант був видалений за деякий час між 4.5.4 та 4.6.4.

які посилаються на це:


1

Сучасний 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

Він уже адаптований для випробування як сучасних, так і застарілих прапорів для вилучення версій. Виправлення знаходиться в останньому рядку, що дозволяє пропустити тестування після першого успіху.


"G-Man каже" Відновити Моніку "" вкрала мою редакцію. Ганьба тобі.
okwap
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.