Почему флаг компилятора gcc неизвестен? - PullRequest
0 голосов
/ 15 сентября 2018

Пытался добавить этот флаг: -Wshadow=compatible-local ( документация ) при компиляции, но он просто выдает это сообщение:


`error: unknown warning option '-Wshadow=compatible-local';
 did you mean '-Wshadow- uncaptured-local'?
 [-Werror,-Wunknown-warning-option]`

Фрагмент моего make-файла:

# COMPILER & FLAGS ============================================================

CC = gcc
CFLAGS = -g -std=c11 -O3 \
         -Wall -Wextra -Werror \
         -Wshadow -Wshadow=compatible-local \
         -Wno-sign-compare \
         -fsanitize=integer \
         -fsanitize=undefined \
         -fsanitize=address -fsanitize-address-use-after-scope

Изменено:

Примечание: моя версия компилятора clang-900.0.39.2. (Там написано clang, хотя вы вводите gcc, потому что я использую macOS и хорошо ... @Aconcagua объясняет, почему внизу)


Кто-то знает, почему это происходит? и / или как это исправить?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Некоторое время назад GCC был компилятором по умолчанию на MacOS, а затем Apple решила переключиться на clang по умолчанию. Предположим, они связали GCC с clang, чтобы люди не задавались вопросом, почему исчез компилятор (ну, более разумно: не ломать системы сборки ...). Отличная идея? По крайней мере, приводит к путанице, когда в игру вступают несовместимости ...

«Как исправить?»

Установите настоящий GCC в вашей системе, заменив символическую ссылку на clang.

Если вы предпочитаете использовать clang (тоже неплохой выбор), уберите флаг, который, по-видимому, специфичен для GCC и не поддерживается clang (вы можете заменить его на эквивалент clang, см. vpetrigo ' s ответ ).

Вы даже можете адаптировать ваш make-файл для совместимости с обоими: Получить строку версии компилятора, проверить, содержит ли возвращаемая строка , содержит"gcc" или "clang", а затем добавить соответствующие флаги компилятора условно.

0 голосов
/ 15 сентября 2018

Похоже, что clang использует совершенно другое наименование флага: http://clang.llvm.org/docs/DiagnosticsReference.html#wshadow-uncaptured-local

Это должно быть -Wshadow-uncaptured-local, а не -Wshadow=compatible-local.

...