2015-11-06 5 views
1

Я пытаюсь создать скрипт configure, используя autoconf. Одна важная проверка - наличие определенного файла заголовка. Это, как правило, очень просто со следующей строкой в ​​моем configure.ac файле.autoconf AC_CHECK_HEADERS для C++ 11

AC_CHECK_HEADERS("CL/cl2.hpp") 

Однако для кода в этом заголовочном файле требуется C++ 11. Таким образом, после запуска итогового ./configure я нахожу следующую ошибку в config.log.

configure:3166: checking CL/cl2.hpp usability 
configure:3166: g++ -c -g -O2 conftest.cpp >&5 
In file included from conftest.cpp:52:0: 
/usr/include/CL/cl2.hpp:442: error #error Visual studio 2013 or another C++11-supported compiler required 

Теперь я использую Debian Stretch и г ++ версии 5.2.1, так что я знаю, что поддерживает C++ 11. Как я могу использовать autoconf для создания файла configure для проверки этого заголовочного файла?

ответ

1

Вам нужно установить параметр компилятора, чтобы включить диалоги C++ 11 в вашей переменной CXXFLAGS. Например, вы можете позвонить:

CXXFLAGS=-std=c++11 ./configure 

Это заставит все тесты выполняются с помощью Autoconf, которые используют C++ компилятор для добавления -std=c++11 в тестах (и IIRC в сгенерированный Makefile).

Для этого в autotools есть макрос AX_CXX_COMPILE_STDCXX_11, который будет тестировать поддержку C++ 11 (необязательный или обязательный), а затем установить соответствующий флаг компилятора, чтобы включить эту поддержку в вашей сборке и тестах. Поместите этот макрос перед проверкой заголовка, и проверки заголовка будут выполняться с поддержкой C++ 11.

+1

Спасибо, это решило проблему. Хотя я бы добавил, что мне нужно установить 'autoconf-archive', чтобы получить макрос' AX_CXX_COMPILE_STDCXX_11'. Следующий вопрос, является ли это агностиком? Будет ли полученный скрипт configure работать в системе Mac или Windows? – cdeterman

+0

Также интересно, что следующая строка в 'config.log' для проверки наличия файла' .hpp' продолжает не использовать параметр '-std = gnu ++ 11', в результате чего появляется предупреждение. Не знаю, почему. – cdeterman