2016-06-05 2 views
4

Я разрабатываю программное обеспечение с кодом C и C++. Недавно я добавил код в стандарте C++ 11. В configure.ac я писал:Как скомпилировать проект с clang и опцией -std = C++ 11, используя autotools

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 

С НКУ У меня нет проблемы, все идет хорошо вариант -std = C++ 11 применяется только к г ++, а не на GCC. Если я пытаюсь настроить с:

CC=clang ./configure 

У меня есть следующее сообщение об ошибке:

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 

Это как если опция была применена на компилятор C, а не только на лязг ++ (как это сделано с НКУ).

Может кто-нибудь помочь мне разобраться, что я делаю неправильно.

+1

Проверьте 'config.log', чтобы увидеть действительную команду компиляции и полученную ошибку. –

+4

То, что «проверяет ли ** C ** компилятор ...» сообщение, заставляет меня думать, что вы забыли [установить язык] (https://www.gnu.org/software/autoconf/manual/autoconf-2.63/html_node /Language-Choice.html). –

+2

Кроме того, вы должны использовать 'CXX = clang ++./Configure' для установки компилятора C++. –

ответ

1

ОК, после некоторых расследований у меня есть ответ. Во-первых, в configure.ac я должен установить язык я использую:

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

Затем, уже есть Autoconf макрос, который проверяет на C++ 11 поддержки в компиляторе C++: AX_CXX_COMPILE_STDCXX_11.

Итак, по этой ссылке: https://www.gnu.org/software/automake/manual/html_node/Local-Macros.html, Мне нужно создать папку m4 и поместить определение макроса внутри. Лучший способ продолжить - загрузить только общий файл ax_cxx_compile_stdcxx.m4 (а не ax_cxx_compile_stdcxx_11.m4). Таким образом, всегда в configure.ac я пишу:

AC_CONFIG_MACRO_DIR([m4]) 

и

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

и вуаля. Все в порядке, по крайней мере, на машине, которую я тестировал.