我可以覆盖 Azure DevOps YAML 文件中的 C++ 语言版本吗?
Can I override the C++ language version in an Azure DevOps YAML file?
我有数百个使用 Azure Devops 构建的 C++ 项目的 VS 解决方案,这些项目有一大堆不同的项目设置,因为项目是在 2 年的不同时间创建的,从不同的 VS 版本转换而来,等等。
我们想要标准化一些设置,例如使用 c++17 标准构建所有内容。那是一个编译器设置 cl.exe /std:c++17
但我看不出有什么方法可以通过 msbuild/YAML 覆盖它;我最初假设我可以将它设置为一个项目 属性 msbuild -p:std=c++17
但这不可能(由于我不完全理解的原因)。
再过几年,我们可能希望强制所有代码都针对 c++20 标准进行构建。同样,我们可能想要比较两种设置之间的构建翻转。那么:有没有一种方法可以在构建时应用编译器设置来覆盖项目特定的设置?
似乎有两种方法(除了单独编辑所有项目文件):
- 在 msbuild 命令行上使用开关
p:ForceImportAfterCppTargets
。这允许指定一个 .props 文件,该文件被评估并覆盖项目设置。此处有更多信息:MSBuild: Custom.After.Microsoft.Common.targets for native C++ projects in VS2010 and in the docs
- 使用目录级文件 Directory.Build.target 文件,这将由 msbuild 自动发现并类似地覆盖项目设置。
一个缺点是这些方法似乎都只适用于 msbuild,而不适用于 Visual Studio 本身,当某些东西将在 IDE 中构建而不是在构建中时,这可能会导致混淆代理或反之亦然。
我有数百个使用 Azure Devops 构建的 C++ 项目的 VS 解决方案,这些项目有一大堆不同的项目设置,因为项目是在 2 年的不同时间创建的,从不同的 VS 版本转换而来,等等。
我们想要标准化一些设置,例如使用 c++17 标准构建所有内容。那是一个编译器设置 cl.exe /std:c++17
但我看不出有什么方法可以通过 msbuild/YAML 覆盖它;我最初假设我可以将它设置为一个项目 属性 msbuild -p:std=c++17
但这不可能(由于我不完全理解的原因)。
再过几年,我们可能希望强制所有代码都针对 c++20 标准进行构建。同样,我们可能想要比较两种设置之间的构建翻转。那么:有没有一种方法可以在构建时应用编译器设置来覆盖项目特定的设置?
似乎有两种方法(除了单独编辑所有项目文件):
- 在 msbuild 命令行上使用开关
p:ForceImportAfterCppTargets
。这允许指定一个 .props 文件,该文件被评估并覆盖项目设置。此处有更多信息:MSBuild: Custom.After.Microsoft.Common.targets for native C++ projects in VS2010 and in the docs - 使用目录级文件 Directory.Build.target 文件,这将由 msbuild 自动发现并类似地覆盖项目设置。
一个缺点是这些方法似乎都只适用于 msbuild,而不适用于 Visual Studio 本身,当某些东西将在 IDE 中构建而不是在构建中时,这可能会导致混淆代理或反之亦然。