Можно ли переопределить языковую версию C++ в YAML-файле Azure DevOps?

avatar
Mr. Boy
1 июля 2021 в 16:19
48
1
0

У меня есть решения VS с сотнями проектов C++, созданных с использованием Azure Devops, в этих проектах большая путаница с различными настройками проекта, поскольку проекты создавались в разное время в течение двух десятилетий, конвертировались из разных версий VS и т. д.

Мы хотим стандартизировать некоторые настройки, например, построить все, используя стандарт C++17. Это параметр компилятора cl.exe /std:c++17, но я не вижу способа переопределить его через msbuild/YAML; Сначала я предполагал, что могу установить его как свойство проекта msbuild -p:std=c++17, но это невозможно (по причинам, которые я не совсем понимаю).

Через пару лет мы, возможно, захотим заставить весь наш код собираться в соответствии со стандартом C++20. Точно так же мы можем захотеть сравнить сборки, перескакивающие между двумя настройками. Итак: есть ли способ применить настройки компилятора во время сборки, которые переопределяют настройки, специфичные для проекта?

Источник

Ответы (1)

avatar
Mr. Boy
5 июля 2021 в 16:52
0

Кажется, существует два подхода (кроме редактирования всех файлов проекта по отдельности):

  1. Используйте переключатель p:ForceImportAfterCppTargets в командной строке msbuild. Это позволяет указать файл .props, который оценивается и переопределяет настройки проекта. Дополнительная информация здесь: MSBuild: Custom.After.Microsoft.Common.targets для собственных проектов C++ в VS2010 и в документах
  2. Использовать файл уровня каталога Файл Directory.Build.target, он будет автоматически обнаружен msbuild и аналогичным образом переопределит настройки проекта.

Единственным недостатком является то, что оба эти метода применимы только к msbuild, а не к самой Visual Studio, что может привести к путанице, когда что-то будет собираться в среде IDE, а не в агенте сборки или наоборот.