Как предоставить дополнительные флаги только родному компилятору cc?

В нашей проектной группе мы разрабатываем приложения для целевых микроконтроллеров с расширением . Для запуска нашего тестраннера мы компилируем с помощью собственного компилятора cc.

В нашей проектной группе большинство используют ОС Linux, но некоторые используют ОС Windows (по причинам). Проблема, с которой мы сталкиваемся, заключается в том, что мы используем ключевое слово C11. При компиляции под линуксом работает, а вот при компиляции под windows получаем следующую ошибку:error LNK2019: unresolved external symbol _Static_assert referenced in function {}

Это связано с тем, что компилятор MSVC по умолчанию реализует ANSI C89, который не поддерживает этот символ. MSVC - поддержка стандартов C

Он также указывает, что добавление или/std:c17параметры компилятора включают поддержку_Static_assert.

Мы уже включили--enable_platform_specific_configпо другим причинам.

Просто добавивbuild:windows --copt="/std:c11"к.bazelrcрешает проблему, но также нарушает нормальную сборку приложения, потому чтоarm-none-eabi-gccкомпилятор не поддерживает флаг компилятора.

Вопрос: Как я могу добавить/std:c11флаг компилятора, чтобы он распространялся только на собственный компилятор msvc, а не на остальные цели моей сборки?

1 ответ

При использовании MSVC для сборки хоста (при создании инструмента, который выдает исходный код, который затем#include'd, например компилятор буфера протокола) добавитьbuild:windows --host_copt="/std:c11". При использовании MSVC для тестовых сборок добавьтеtest:windows --host_copt="/std:c11". Не вставляй этоbuild:windows --coptпотому что это будет применяться даже при запуске сборок для цели.

Другие вопросы по тегам