Saya sedang mengembangkan perangkat lunak dengan kode C dan C++. Saya baru saja menambahkan beberapa kode dalam standar c++11. Di configure.ac saya menulis:

for f in '-std=c++11' '-std=c++11 -stdlib=libc++'
do
    AX_CHECK_COMPILE_FLAG([$f], [CXXFLAGS="$CXXFLAGS $f" stdpass=true], [], [], [])
${stdpass-false} && break
done
if ! "${stdpass-false}"; then
    AC_MSG_ERROR([Unable to turn on C++11 mode with this compiler])
fi

Dengan gcc saya tidak masalah, semuanya berjalan dengan baik opsi -std=c++11 hanya diterapkan pada g++ dan bukan pada gcc. Jika saya mencoba mengonfigurasi dengan:

CC=clang ./configure

Saya memiliki kesalahan berikut:

checking whether C compiler accepts -std=c++11... no
checking whether C compiler accepts -std=c++11 -stdlib=libc++... no
configure: error: Unable to turn on C++11 mode with this compiler

Ini seperti jika opsi diterapkan pada kompiler C dan tidak hanya pada dentang++ (seperti yang dilakukan dengan gcc).

Dapatkah seseorang membantu saya untuk mencari tahu apa yang saya lakukan salah.

5
lock 5 Juni 2016, 19:19
1
Periksa config.log untuk melihat perintah kompilasi yang sebenarnya, dan kesalahan yang dihasilkan.
 – 
Sam Varshavchik
5 Juni 2016, 19:26
4
Pesan "memeriksa apakah C compiler..." itu membuat saya berpikir bahwa Anda lupa untuk menyetel bahasa.
 – 
Some programmer dude
5 Juni 2016, 19:26
2
Juga, Anda harus menggunakan CXX=clang++ ./configure untuk menyetel kompiler C++.
 – 
Some programmer dude
5 Juni 2016, 19:27
1
Joachim: Tampaknya menempatkan keduanya: AC_LANG([C]), AC_LANG([C++]) memberikan hasil yang baik !!! Anda harus menulisnya di bagian jawaban ;) Terima kasih
 – 
lock
5 Juni 2016, 20:14
2
Sudah ada makro autoconf yang memeriksa dukungan C++11 di kompiler C++: AX_CXX_COMPILE_STDCXX_11. Untuk digunakan di configure.ac, letakkan di direktori m4 proyek Anda.
 – 
Mike Kinghan
6 Juni 2016, 10:07

1 menjawab

Jawaban Terbaik

OK, setelah beberapa penyelidikan saya punya jawabannya. Pertama, di configure.ac saya harus mengatur bahasa yang saya gunakan:

AC_LANG([C])
AC_LANG([C++])

Kemudian, sudah ada makro autoconf yang memeriksa dukungan C++11 di kompiler C++: AX_CXX_COMPILE_STDCXX_11.

Jadi, ikuti tautan ini: https://www.gnu.org /software/automake/manual/html_node/Local-Macros.html, Saya harus membuat folder m4 dan memasukkan definisi makro di dalamnya. Cara terbaik untuk melanjutkan adalah hanya mengunduh ax_cxx_compile_stdcxx.m4 yang lebih umum file (dan bukan ax_cxx_compile_stdcxx_11.m4). Jadi, selalu di configure.ac saya menulis:

AC_CONFIG_MACRO_DIR([m4])

Dan

m4_include([m4/ax_cxx_compile_stdcxx.m4])
AX_CXX_COMPILE_STDCXX(11, noext, mandatory)

Dan Voila. Semuanya OK, setidaknya pada mesin yang saya uji.

1
lock 9 Juni 2016, 15:47