Как проверить поддержку компиляции флага в autoconf для clang - PullRequest
0 голосов
/ 28 сентября 2018

Мы можем проверить поддержку определенных флагов компилятора в autoconf, используя:

AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])

Эти проверки возвращают значение true, но clang их не поддерживает.

AX_CHECK_COMPILE_FLAG([-Woverride-init])
AX_CHECK_COMPILE_FLAG([-Wformat-truncation])

Как проверить флаг компиляции поддержки в autoconf для clang?

Я меняю свой компилятор на

export CC=/usr/bin/clang-6.0 
export CXX=/usr/bin/clang++-6.0 

и, если эхо, в сценарий $CC и $CXX, все в порядке.

ссылка на configure.ac

1 Ответ

0 голосов
/ 02 октября 2018

Если вы используете clang -Wsome-invalid-option -xc /dev/null, вы увидите, что clang выдает предупреждение о неизвестной опции -Wsome-invalid-option.Документы для AX_CHECK_COMPILE_FLAG указывают, что предупреждения игнорируются.

Необходимо использовать аргумент 4 макроса, чтобы включить -Werror:

AX_CHECK_COMPILE_FLAG([-Woverride-init], , , [-Werror])

Эта проверка также генерирует переменную кэша,в случае, если вам нужно переопределить его:

ax_cv_cflags__Werror__Woverride_init

Если установлено значение yes, то компилятор поддерживает флаг, иначе он не поддерживает флаг.Вы можете использовать это и для других флагов:

AX_CHECK_COMPILE_FLAG([-Wformat-truncation], , , [-Werror])
AS_VAR_IF([ax_cv_cflags__Werror__Wformat_truncation], [yes],
    ,
    [AC_FATAL([-Wformat-truncation not supported])])

Общей формой является ax_cv_cflags_{EXTRA}_{FLAG} для C. Очевидно, что если вы собираетесь использовать AS_VAR_IF для проверки переменной кэша, тем не менее, вы можететакже используйте второй и / или третий аргументы макроса, и вы можете использовать AC_FATAL, если требуется флаг компиляции:

AX_CHECK_COMPILE_FLAG([-Wformat-truncation],
    ,
    [AC_FATAL([-Wformat-truncation is required])],
    [-Werror])
...