gcc opsi baris perintah yang tidak dikenal '-V' dan '-qversion' dengan autoconf

15

Ketika mengkompilasi dengan gcc 4.7.2 dan autoconf 2.69, saya secara rutin mendapatkan hasil seperti ini di configure.log. Contoh:

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

Kompilasi berjalan dengan sukses, tetapi saya bertanya-tanya mengapa autoconf sedang menguji untuk baris perintah yang tidak didukung gcc. Apakah ini untuk kompiler lain?

syrinx
sumber

Jawaban:

11

Mengutip ini:

gcc -V adalah cara untuk memilih versi gcc tertentu ketika Anda memiliki lebih dari satu, itu adalah umpan di sini: configure adalah iterasi melalui serangkaian opsi (--version -v -V dll) untuk memastikan ia dapat login versi dari kompiler C, baik itu gcc atau yang lainnya.

Mengutip ini:

gcc dulu memiliki opsi -V untuk laporan versi. Sekarang menggunakan -v, dan menyediakan opsi konfigurasi yang digunakan ketika kompiler dibangun.

Paket Anda sedikit tanggal dan tidak mencerminkan fakta itu.

BTW, opsi -qversi digabung ke ...

Mengutip ini:

Pada beberapa versi gcc, opsi -V memberitahukannya untuk menggunakan versi kompilator yang ditentukan - tetapi membutuhkan argumen. Sudah didokumentasikan di sini. Opsi ini tampaknya telah dihapus beberapa waktu antara 4.5.4 dan 4.6.4.

yang mereferensikan ini:

hujan stabil
sumber
1

Modern autoconf versi 2.69 dapat digunakan dengan metode ekstraksi informasi kompiler diperpanjang berikut:

# 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

Ini sudah disesuaikan untuk mencoba bendera ekstraksi versi modern maupun warisan. Perbaikan ada di baris terakhir, memungkinkan untuk melewati pengujian setelah sukses pertama.

Oleg Kokorin
sumber
"G-Man Mengatakan 'Reinstate Monica'" mencuri hasil editku. Tidak tahu malu.
okwap