MSBuildDeps¶
The MSBuildDeps
是适用于 Microsoft MSBuild 构建系统的依赖信息生成器。它会为包的每个依赖生成多个 xxxx.props 属性文件,供使用 MSBuild 或 Visual Studio 的消费者使用,只需将生成的属性文件添加到解决方案和项目中即可。
The MSBuildDeps
生成器可以在 conanfile 中按名称使用
class Pkg(ConanFile):
generators = "MSBuildDeps"
[generators]
MSBuildDeps
它也可以在 conanfile 的 generate()
方法中完全实例化
from conan import ConanFile
from conan.tools.microsoft import MSBuildDeps
class Pkg(ConanFile):
settings = "os", "compiler", "arch", "build_type"
requires = "zlib/1.2.11", "bzip2/1.0.8"
def generate(self):
ms = MSBuildDeps(self)
ms.generate()
生成的文件¶
The MSBuildDeps
生成器是一个多配置生成器,它为不同的 Debug/Release 配置生成不同的文件。例如,运行这些命令
$ conan install . # default is Release
$ conan install . -s build_type=Debug
它生成以下文件
conan_zlib_vars_release_x64.props: 针对
zlib
依赖的Conanzlibxxxx
变量定义,Release 配置,例如ConanzlibIncludeDirs
,ConanzlibLibs
等。conan_zlib_vars_debug_x64.props: 针对
zlib
依赖的相同的Conanzlib
变量,Debug 配置conan_zlib_release_x64.props: 在当前构建中激活
Conanzlibxxxx
变量作为标准的 C/C++ 构建配置,Release 配置。此文件还包含传递性依赖的定义。conan_zlib_debug_x64.props: 相同的
Conanzlibxxxx
变量激活,Debug 配置,也包含传递性依赖。conan_zlib.props:
zlib
的属性文件。它根据配置有条件地包含上面两个 Release/Debug 属性文件之一。图中为每个依赖都生成了相同的 5 个文件,在本例中也包括
conan_bzip.props
,它有条件地包含 Release/Debug bzip 属性文件。conandeps.props: 包含所有直接依赖的属性文件,本例中包括
conan_zlib.props
和conan_bzip2.props
如果你想依赖所有声明的依赖,请将 conandeps.props 添加到你的解决方案项目文件中。对于单项目解决方案,这可能是首选方式。对于多项目解决方案,你可能会更高效地按项目添加属性文件。例如,你可以将 conan_zlib.props 属性添加到解决方案中的“project1”,将 conan_bzip2.props 添加到解决方案中的“project2”。
当包没有组件时,会生成上述文件。如果包定义了组件,则会生成以下文件
conan_pkgname_compname_vars_release_x64.props: 包
pkgname
的组件compname
的变量定义conan_pkgname_compname_release_x64.props: 将上述变量激活为在构建中使用的 VS 有效变量
conan_pkgname_compname.props: 包
pkgname
的组件compname
的属性文件。它根据配置有条件地包含特定的激活属性文件。conan_pkgname.props: 包
pkgname
的属性文件。它包含并汇总了包的所有组件。conandeps.props: 同上,汇总了包的所有直接依赖的属性文件(例如
conan_pkgname.props
)
如果你的项目只依赖于特定组件,可以将特定的 conan_pkgname_compname.props
文件添加到项目中,而不是全局或包级别的属性文件。
需求特性支持¶
上述生成的文件,更具体地说,包含变量的文件(conan_pkgname_vars_release_x64.props/conan_pkgname_compname_vars_release_x64.props
),如果需求特性排除了某些信息,它们将不包含所有信息。例如,默认情况下,传递性依赖的 includedirs
将为空,因为除非定义了针对该包的特定 requires
,否则用户不应包含这些头文件。
配置¶
如果你的 Visual Studio 项目定义了自定义配置,例如 ReleaseShared
或 MyCustomConfig
,可以在 MSBuildDeps
生成器中定义它,这样不同的项目配置就可以使用不同的依赖集。假设我们当前的项目可以构建为共享库,使用自定义配置 ReleaseShared
,并且包也通过 shared
选项控制这一点
from conan import ConanFile
from conan.tools.microsoft import MSBuildDeps
class Pkg(ConanFile):
settings = "os", "compiler", "arch", "build_type"
options = {"shared": [True, False]}
default_options = {"shared": False}
requires = "zlib/1.2.11"
def generate(self):
ms = MSBuildDeps(self)
# We assume that -o *:shared=True is used to install all shared deps too
if self.options.shared:
ms.configuration = str(self.settings.build_type) + "Shared"
ms.generate()
这会为该自定义配置生成新的属性文件,在 IDE 中切换配置可以获取依赖配置,例如 Debug/Release,甚至静态库和/或共享库。
平台¶
默认情况下,Platform
是根据 Conan 的 arch
设置计算得出的,如下所示:
Conan |
MSBuild |
---|---|
x86 |
Win32 |
x86_64 |
x64 |
armv7 |
ARM |
armv8 |
ARM6 |
如有必要,可以覆盖此默认平台,例如对于希望使用 Platform=x86
而非 Win32
的 Wix 项目,可以通过定义 platform
属性来实现
def generate(self):
deps = MSBuildDeps(self)
if self.settings.arch == "x86":
deps.platform = "x86" # Override the "Win32" default value
deps.generate()
依赖¶
MSBuildDeps
使用 self.dependencies
访问依赖信息。以下依赖会被转换为属性文件:
所有直接依赖,即当前
conanfile
声明的那些,位于host
上下文:所有常规的requires
,加上处于 host 上下文的tool_requires
,例如像gtest
或catch
这样的测试框架。这些直接依赖的所有传递性
requires
(都位于 host 上下文)位于 build 上下文的 tool requires,即在构建机器上运行的应用和可执行文件,无论目标平台如何,都专门添加到
<ExecutablePath>
属性中,其值取自$(Conan{{name}}BinaryDirectories)
定义的属性。这允许使用<CustomBuild>
和<Command>
元素定义自定义构建命令、调用代码生成工具。
自定义¶
conf¶
MSBuildDeps
受这些 [conf]
变量影响
tools.microsoft.msbuilddeps:exclude_code_analysis
要添加到 Visual StudioCAExcludePath
属性的包名模式列表。
参考¶
- class MSBuildDeps(conanfile)¶
MSBuildDeps 类生成器 conandeps.props: 无条件导入所有 直接 依赖
- 参数:
conanfile –
< ConanFile object >
当前的配方对象。始终使用self
。
- configuration¶
定义构建类型。默认情况下,取
settings.build_type
的值。
- configuration_key¶
定义用于有条件地选择要导入哪个属性表的配置键(默认为
"Configuration"
)。
- platform¶
平台名称,例如,如果
settings.arch == "x86"
,则为Win32
。
- platform_key¶
定义用于有条件地选择要导入哪个属性表的平台键(默认为
"Platform"
)。
- exclude_code_analysis¶
要添加到 Visual Studio
CAExcludePath
属性的包名模式列表,对于每个匹配项,作为其conan_[DEP]_[CONFIG].props
的一部分。默认情况下,值为tools.microsoft.msbuilddeps:exclude_code_analysis
配置所给定的值。
- generate()¶
在
conanfile.generators_folder
中生成conan_<pkg>_<config>_vars.props
,conan_<pkg>_<config>.props
和conan_<pkg>.props
文件。