MSBuildToolchain

The MSBuildToolchain 是用于 MSBuild 的工具链生成器。它将生成可以添加到 Visual Studio 解决方案项目中的 MSBuild 属性文件。此生成器将当前的包配置、设置和选项转换为 MSBuild 属性文件语法。

此生成器可在 conanfile 中通过名称使用

conanfile.py
class Pkg(ConanFile):
    generators = "MSBuildToolchain"
conanfile.txt
[generators]
MSBuildToolchain

它也可以在 conanfile 的 generate() 方法中完全实例化

from conan import ConanFile
from conan.tools.microsoft import MSBuildToolchain

class App(ConanFile):
    settings = "os", "arch", "compiler", "build_type"

    def generate(self):
        tc = MSBuildToolchain(self)
        tc.generate()

The MSBuildToolchain 在执行 conan install 命令后将生成三个文件

$ conan install . # default is Release
$ conan install . -s build_type=Debug
  • 主文件 conantoolchain.props,用于添加到项目。

  • 一个 conantoolchain_<config>.props 文件,该文件将根据配置和平台从之前的 conantoolchain.props 文件中有条件地包含,例如,conantoolchain_release_x86.props

  • 一个 conanvcvars.bat 文件,其中包含 vcvars 调用,用于从命令行或任何其他自动化工具定义构建环境(如果打开 IDE 则可能不需要)。此文件将由 MSBuild.build() 方法自动调用。

每次使用不同配置的调用都会创建一个新的属性 .props 文件,该文件也是有条件包含的。这允许安装不同的配置,然后直接从 Visual Studio IDE 切换它们。

The MSBuildToolchain 文件可以配置

  • Visual Studio 运行时 (MT/MD/MTd/MDd),从 Conan 输入设置中获取。

  • C++ 标准,从 Conan 输入设置中获取。

使用工具链的一个优点是,它们有助于在本地开发流程中实现与在缓存中创建包时完全相同的构建。

自定义

conf

MSBuildToolchain 受这些 [conf] 变量的影响

  • tools.microsoft.msbuildtoolchain:compile_options 一个类似字典的对象,用于向 <ClCompile> 部分添加额外的编译选项。字典将按如下方式转换:<[KEY]>[VALUE]</[KEY]>

  • tools.microsoft:winsdk_version 值将定义工具链文件中的 <WindowsTargetPlatformVersion> 元素。

  • tools.build:cxxflags 一个额外的 C++ 标志列表,将被附加到 <ClCompile><ResourceCompile><AdditionalOptions> 部分。

  • tools.build:cflags 一个额外的纯 C 标志列表,将被附加到 <ClCompile><ResourceCompile><AdditionalOptions> 部分。

  • tools.build:sharedlinkflags 一个额外的链接器标志列表,将被附加到 <Link><AdditionalOptions> 部分。

  • tools.build:exelinkflags 一个额外的链接器标志列表,将被附加到 <Link><AdditionalOptions> 部分。

  • tools.build:defines 一个预处理器定义列表,将被附加到 <ResourceCompile><PreprocessorDefinitions> 部分。

参考

class MSBuildToolchain(conanfile)

MSBuildToolchain 类生成器

参数:

conanfile< ConanFile object > 当前的 recipe 对象。始终使用 self

generate()

生成一个 conantoolchain.props 文件,一个 conantoolchain_<config>.props 文件,并且如果 compiler=msvc,还会生成一个 conanvcvars.bat 文件。在前两种情况下,它们将具有有效的 XML 格式,包含所有设置,就像任何其他 VS 项目 *.props 文件一样。最后一个模拟了 vcvarsall.bat 环境变量脚本。另请参阅 VCVars

属性

  • properties:添加到生成的 .props 文件中的额外属性。您可以按照键值语法定义属性,例如

from conan import ConanFile
from conan.tools.microsoft import MSBuildToolchain

class App(ConanFile):
    settings = "os", "arch", "compiler", "build_type"

    def generate(self):
        msbuild = MSBuildToolchain(self)
        msbuild.properties["IncludeExternals"] = "true"
        msbuild.generate()

然后,生成的 conantoolchain_<config>.props 文件将在其内容中包含定义的属性

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemDefinitionGroup>
...
</ItemDefinitionGroup>
<PropertyGroup Label="Configuration">
    ...
    <IncludeExternals>true</IncludeExternals>
    ...
</PropertyGroup>
</Project>