Как использовать функции С++ 11 с помощью Autoconf?

У меня есть проект, настроенный через Autoconf, и я хочу начать использовать возможности С++ 11 в этом проекте. Как всегда включить переключатель "-std = gnu ++ 0x" и поддерживать функции, проверенные при настройке?

Ответ 1

Вы можете сделать это с помощью AX_CHECK_COMPILE_FLAG, например:

AX_CHECK_COMPILE_FLAG([-std=c++0x], [
                        CXXFLAGS="$CXXFLAGS -std=c++0x"])

(Здесь нужно быть осторожным, чтобы AC_LANG был С++, а не C в точке, которую это вызвано, потому что можно использовать gcc для C и что-то еще для С++ или наоборот).

Ответ 3

Я думаю, что самый простой способ сделать это - добавить:

CXXFLAGS="$CXXFLAGS -std=c++0x"

в configure.ac перед AC_PROG_CXX. Если компилятор не принимает -std = С++ 0x, тогда configure будет терпеть неудачу, поскольку "компилятор С++ не может создавать исполняемые файлы". Это не лучшие сообщения об ошибках, но гарантирует, что сборки будут успешными, если configure будет успешным. Для лучшего сообщения об ошибке вы можете проверить, что компилятор принимает флаг после AC_PROG_CXX. В любом случае вы хотите, чтобы configure завершился с ошибкой, если компилятор не предоставил необходимые функции, но это требует ваше программное обеспечение.

Обратите внимание, что установка CXXFLAGS перед AC_PROG_CXX имеет нежелательный побочный эффект от предотвращения установки по умолчанию для CXXFLAGS в случае, если пользователь не установил эту переменную при запуске configure. По этой причине обычно не рекомендуется устанавливать CXXFLAGS в конфигурацию, поэтому, вероятно, лучше проверить флаг после AC_PROG_CXX (например, с помощью решения для awoodland) - просто убедитесь, что вы добавили AC_MSG_ERROR в третий аргумент AX_CHECK_COMPILE_FLAG, чтобы configure не работает, если функции недоступны.

Ответ 4

Чтобы включить компилятор (если, конечно, пользователь не переопределяет его), поместите это в свой Makefile.am:

AM_CXXFLAGS=-std=c++0x

Я не думаю, что существует проверка на наличие возможностей С++ 11, но вы должны иметь возможность легко записывать тестовую программу с помощью функций, которые вы хотите использовать, что не удастся, если эти функции не будут поддерживается. Затем вы можете написать тест, описанный в в этом разделе руководства Autoconf.