MSBuildDeps¶
MSBuildDeps
是用于 Microsoft MSBuild 构建系统的依赖信息生成器。它将生成多个 *xxxx.props* 属性文件,每个文件对应一个包的依赖项,供使用 MSBuild 或 Visual Studio 的使用者使用,只需将生成的属性文件添加到解决方案和项目中即可。
可以在 conanfiles 中通过名称使用 MSBuildDeps
生成器
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()
生成的文件¶
MSBuildDeps
生成器是一个多配置生成器,它为任何不同的 Debug/Release 配置生成不同的文件。例如,运行以下命令
$ conan install . # default is Release
$ conan install . -s build_type=Debug
它生成以下文件
conan_zlib_vars_release_x64.props:为
zlib
依赖项的 Release 配置定义的Conanzlibxxxx
变量,如ConanzlibIncludeDirs
、ConanzlibLibs
等。conan_zlib_vars_debug_x64.props:相同的
Conanzlib
变量,用于zlib
依赖项,Debug 配置conan_zlib_release_x64.props:在当前构建中作为标准 C/C++ 构建配置激活
Conanzlibxxxx
变量,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* 属性添加到解决方案中的“项目 1”,并将 *conan_bzip2.props* 属性添加到解决方案中的“项目 2”。
当包没有组件时,会生成上述文件。如果包定义了组件,则会生成以下文件
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,甚至包括静态和/或共享库。
依赖项¶
MSBuildDeps
使用 self.dependencies
来访问依赖项信息。以下依赖项转换为属性文件
所有直接依赖项,即当前
conanfile
声明的依赖项,都存在于host
上下文中:所有常规requires
,以及tool_requires
,它们都在 host 上下文中,例如测试框架,如gtest
或catch
。这些直接依赖项的所有传递
requires
(都在 host 上下文中)构建上下文中的工具需求,即在构建机器上运行的应用程序和可执行文件,与目标平台无关,仅添加到
<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 对象 >
当前配方对象。始终使用self
。
- configuration_key¶
定义用于有条件地选择要导入的属性表的配置键(默认为
Configuration
)。
- platform_key¶
定义用于有条件地选择要导入的属性表的平台键(默认为
Platform
)。
- generate()¶
在
conanfile.generators_folder
中生成conan_<pkg>_<config>_vars.props
、conan_<pkg>_<config>.props
和conan_<pkg>.props
文件。