MSBuildToolchain¶
MSBuildToolchain 是 MSBuild 的工具链生成器。它将生成 MSBuild 属性文件,这些文件可以添加到 Visual Studio 解决方案项目中。此生成器将当前的包配置、设置和选项转换为 MSBuild 属性文件语法。
此生成器可在 conanfile 中通过名称使用
class Pkg(ConanFile):
generators = "MSBuildToolchain"
[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()
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 中切换它们。
MSBuildToolchain 文件可以配置
Visual Studio 运行时 (MT/MD/MTd/MDd),从 Conan 输入设置获取。
C++ 标准,从 Conan 输入设置获取。
使用工具链的一个优势是,它们有助于实现与本地开发流程完全相同的构建,就像在缓存中创建包时一样。
自定义¶
conf¶
MSBuildToolchain 受这些 [conf] 变量影响
tools.microsoft.msbuildtoolchain:compile_options类似字典的对象,用于将额外的编译选项添加到<ClCompile>部分。字典将按如下方式转换:<[KEY]>[VALUE]</[KEY]>并插入到<ClCompile>元素中。如果定义了compile_options属性,它将使用此字典中的值进行更新。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 对象 >当前配方对象。始终使用self。
属性¶
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>
compile_options: 添加到生成的
.props文件的其他编译选项。您可以以键值语法定义属性,例如
def generate(self):
msbuild = MSBuildToolchain(self)
msbuild.compile_options = {'ExceptionHandling': 'Async'}
msbuild.generate()
然后,生成的 conantoolchain_<config>.props 文件将在其内容中包含定义的编译选项
<ClCompile>
...
<LanguageStandard>...</LanguageStandard>
<ExceptionHandling>Async</ExceptionHandling>
</ClCompile>
请注意,此属性将使用 tools.microsoft.msbuildtoolchain:compile_options 中的 conf 进行更新。