MSBuildToolchain¶
MSBuildToolchain
是用于 MSBuild 的工具链生成器。 它将生成可以添加到 Visual Studio 解决方案项目的 MSBuild 属性文件。 此生成器将当前软件包配置、设置和选项转换为 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]>
。tools.microsoft:winsdk_version
值将定义工具链文件中的<WindowsTargetPlatformVersion>
元素。tools.build:cxxflags
将附加到<ClCompile>
和<ResourceCompile>
中的<AdditionalOptions>
部分的额外 C++ 标志列表。tools.build:cflags
将附加到<ClCompile>
和<ResourceCompile>
中的<AdditionalOptions>
部分的额外纯 C 标志列表。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>