2015-02-17 4 views
2

У меня есть проект autotools, который требует компилятора, который поддерживает функцию C11 _Generic.Как создать созданный autotools ./configure обеспечить доступность C11's _Generic?

Clang 2.3 и gcc 4.9 поддерживают это, но gcc 4.8.2 (поставляется с Ubuntu 14.04LTS).

(Смутно GCC 4.8.2 поддерживает --std=c11, но не _Generic особенность этого стандарта.)

Есть макрос для configure.ac, чтобы обеспечить использование совместимого компилятора в _Generic?

+1

Что относительно gcc> = 4.9 или clang> = 2.3? – ouah

+0

@ouah как я могу требовать конкретных компиляторов - должен ли я использовать PKG_CHECK_MODULES, как и для зависимостей библиотек? – fadedbee

+1

Да, в основном '-std = c11' вам не очень много говорит. Даже новые версии clang по-прежнему, похоже, не реализуют все макросы проверки функций для дополнительных частей. В частности, они пропускают определение '__STDC_NO_THREADS__', если в библиотеке C нет поддержки потоков C11. –

ответ

3

Для этого нет встроенного теста, но я думаю, вы можете легко сделать это, используя AC_COMPILE_IFELSE. В руководстве объясняются все детали, но в основном вы должны дать ему тестовую программу с использованием _Generic в качестве аргумента, а затем сделать запрос на случай сбоя AC_MSG_ERROR.

В некоторых случаях я считаю, что лучше просто не проверять языковые функции, которые вы планируете использовать безоговорочно. Вы можете просто использовать их и разрешить компиляцию.

+0

Проверка заранее - это более любезно для потенциального пользователя вашего кода, который невольно пытается его скомпилировать. Особенно, если они не на своем C11 и не знают, что такое '_Generic'. – ptomato