Как переключаться между целями сборки в коде Visual Studio? - PullRequest
0 голосов
/ 02 февраля 2019

Мы пытаемся перейти от Code :: Blocks к Visual Studio Code для разработки на C / C ++.Основная причина заключается в том, что благодаря IntelliSense обеспечивается лучшее завершение кода.Но сравнение этих двух не должно быть темой здесь.

Чтобы компилировать наши старые проекты, мы создали make-файл и задачи в коде Visual Studio.Пока все работает отлично.

Там, где все стало сложнее, это разные цели сборки.Допустим, у нас есть пример проекта, в котором нам нужно скомпилировать две версии нашей программы, которые примерно на 95% одинаковы.Поэтому в Code :: Blocks-times мы решили сохранить все в одном проекте, но различать разные биты исходного кода с помощью define и ifdef.Таким образом, вы выбираете правильную цель сборки, которая добавляет определения к вызову gcc, и создается правильная версия обоих.Чтобы сделать вещи немного сложнее, каждая версия имеет также цель отладки и выпуска.Таким образом, всего четыре цели сборки:

  • Версия 1 DEBUG, построенная с -DVERSION1 -DDEBUG
  • Версия 1 RELEASE, построенная с -DVERSION1 -DRELEASE
  • Версия 2DEBUG, собранный с -DVERSION2 -DDEBUG
  • Версия 2 RELEASE, собранный с -DVERSION2 -DRELEASE

Итак, наш make-файл, который мы используем в VS Code, является настройкой, в которой мы также можем выбратьпостроить цель и правильные версии построены.Пока все хорошо.

Теперь в игру вступают C / C ++ - Extension и IntelliSense.Они используют clang для «компиляции» кода на лету для автоматического завершения и выделения участков кода, которые фактически используются.Поскольку наши #define s (VERSION1 или VERSION2) для разных версий предоставляются только компилятору gcc в make-файле, clang не знает о них.Не зная их, разделы кода отображаются серым цветом (что не так уж и сложно), но также автоматическое завершение не работает для переменных, которые могут быть объявлены в таком разделе.

Конечно, мыможете указать определения в c_cpp_properties.json, а также сделать различные цели сборки там.Но это будет означать, что нам нужно переключаться между целями сборки дважды: сначала для расширения C / C ++, а затем для make-файла.Я почти уверен, что люди забудут одно или другое и будут разочарованы.

Короче говоря: есть ли способ переключения целей сборки в коде Visual Studio, которые влияют как на IntelliSense, так и на фактическую сборку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...