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>` 调用与当前配方 `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` 接受 `quiet` 或 `verbose` 中的一个,作为参数传递给 `MSBuild.build()` 调用,形式为 `msbuild .... /verbosity:{Quiet,Detailed}`。

  • `tools.microsoft.msbuild:max_cpu_count` 最大 CPU 数,将作为参数传递给 `MSBuild.build()` 调用,形式为 `msbuild .... /m:N`。如果 `max_cpu_count=0`,则不带参数使用 `/m`,这意味着使用所有可用 CPU。

参考

class MSBuild(conanfile)

MSBuild 构建助手类

参数:

conanfile< ConanFile 对象 > 当前配方对象。始终使用 self

command(sln, targets=None)

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

参数:
  • sln – Visual Studio `*.sln` 文件的名称 (`str`)。

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

返回:

`str` MSBuild 命令行。

build(sln, targets=None)

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

参数:
  • sln – Visual Studio `*.sln` 文件的名称 (`str`)。

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