Как предоставить дополнительные флаги только родному компилятору 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
потому что это будет применяться даже при запуске сборок для цели.