MSBuild

MSBuild 构建助手是 MSBuild 命令行调用的一个包装器。 它将类似 msbuild "MyProject.sln" /p:Configuration=<conf> /p:Platform=<platform> 的调用抽象为 Python 方法。

这个助手可以像这样使用

from conan import ConanFile
from conan.tools.microsoft import MSBuild

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

    def build(self):
        msbuild = MSBuild(self)
        msbuild.build("MyProject.sln")

MSBuild.build() 方法在内部实现对 msbuild 的调用,例如

$ <vcvars-cmd> && msbuild "MyProject.sln" /p:Configuration=<configuration> /p:Platform=<platform>

其中

  • <vcvars-cmd> 调用与当前 recipe settings 匹配的 Visual Studio 提示符。

  • configuration,通常是 Release、Debug,它将从 settings.build_type 中获得,但可以使用 build_type 属性进行自定义。

  • <platform> 是架构,是从 settings.arch 到常见的 'x86'、'x64'、'ARM'、'ARM64'、'ARM64EC' 的映射。 可以使用 platform 属性进行自定义。

自定义

属性

如果您需要更改以下属性,您可以自定义它们

  • build_type (默认 settings.build_type): /p:Configuration 的值。

  • platform (默认基于 settings.arch 以选择以下值之一: ('x86', 'x64', 'ARM', 'ARM64', 'ARM64EC'): /p:Platform 的值。

示例

from conan import ConanFile
from conan.tools.microsoft import MSBuild
class App(ConanFile):
    settings = "os", "arch", "compiler", "build_type"
    def build(self):
        msbuild = MSBuild(self)
        msbuild.build_type = "MyRelease"
        msbuild.platform = "MyPlatform"
        msbuild.build("MyProject.sln")

conf

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

  • tools.build:verbosity 接受 quietverbose 之一,以传递给 MSBuild.build() 调用,如 msbuild .... /verbosity:{Quiet,Detailed}

  • tools.microsoft.msbuild:max_cpu_count 要传递给 MSBuild.build() 调用的最大 CPU 数量,如 msbuild .... /m:N。 如果 max_cpu_count=0,则它将使用没有参数的 /m,这意味着使用所有可用的 cpu。

参考

class MSBuild(conanfile)

MSBuild 构建助手类

参数:

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

command(sln, targets=None)

获取 msbuild 命令行。 例如,msbuild.exe "MyProject.sln" -p:Configuration=<conf> -p:Platform=<platform>

参数:
  • slnstr Visual Studio *.sln 文件的名称

  • targetstargets 是一个可选参数,默认为 None,否则它是要构建的目标列表

返回值:

str msbuild 命令行。

build(sln, targets=None)

运行从 self.command(sln) 获取的 msbuild 命令行。

参数:
  • slnstr Visual Studio *.sln 文件的名称

  • targetstargets 是一个可选参数,默认为 None,否则它是要构建的目标列表