gcc нераспознанные параметры командной строки '-V' и '-qversion' с autoconf

15

При компиляции с 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, когда у вас их больше одной, но здесь есть приманка: configure перебирает набор параметров (--version -v -V и т. д.), чтобы убедиться, что он может регистрировать версия компилятора C, будь то gcc или что-то еще.

Ссылаясь на это:

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

Ваша посылка немного устарела и не отражает этот факт.

Кстати, опция -qversion была объединена с -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