NMakeDeps

此生成器可以如下方式使用:

from conan import ConanFile

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

    requires = "mydep/1.0"
    # attribute declaration
    generators = "NMakeDeps"

    # OR explicit usage in the generate() method
    def generate(self):
        deps = NMakeDeps(self)
        deps.generate()

    def build(self):
        self.run(f"nmake /f makefile")

该生成器将创建一个 conannmakedeps.bat 环境变量脚本,该脚本定义了 CLLIB_LINK_ 环境变量,从而注入必要的标志以定位和链接在 requires 中声明的依赖项。此生成器最有可能与 NMakeToolchain 生成器一起使用。

NMakeToolchain

此生成器可以如下方式使用:

from conan import ConanFile

class Pkg(ConanFile):
    settings = "os", "compiler", "build_type", "arch"
    generators = "NMakeToolchain"

    def build(self):
        self.run("nmake /f makefile")

或者可以在 conanfile 的 generate() 方法中完全实例化:

from conan import ConanFile
from conan.tools.microsoft import NMakeToolchain

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

    def generate(self):
        tc = NMakeToolchain(self)
        tc.generate()

    def build(self):
        self.run("nmake /f makefile")

NMakeToolchain 生成器将创建一个 conannmaketoolchain.bat 环境变量脚本,该脚本将从 profile(build_type、runtime、cppstd、来自 conf 的构建标志)推导出的标志注入到 NMake 可以理解的环境变量中:CL_LINK_。 它还将生成一个 conanvcvars.bat 脚本,该脚本激活与 Conan 主机设置 archcompilercompiler.version 以及构建设置 arch 匹配的正确 VS 提示符。

构造函数

def __init__(self, conanfile):
  • conanfile:当前的 recipe 对象。始终使用 self

属性

如果想要注入更多标志,可以在调用 generate() 方法之前更改某些属性

from conan import ConanFile
from conan.tools.microsoft import NMakeToolchain

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

    def generate(self):
        tc = NMakeToolchain(self)
        tc.extra_cflags.append("/my_flag")
        tc.extra_defines.append("FOO=BAR")
        tc.generate()
  • extra_cflags (默认为 []):额外的 cflags。

  • extra_cxxflags (默认为 []):额外的 cxxflags。

  • extra_defines (默认为 []):额外的 defines。

  • extra_ldflags (默认为 []):额外的 ldflags。

conf

NMaketoolchain 受以下 [conf] 变量影响:

  • tools.build:cflags 将被 CL 使用的额外的纯 C 标志列表。

  • tools.build:cxxflags 将被 CL 使用的额外的 C++ 标志列表。

  • tools.build:defines 将被 CL 使用的预处理器定义列表。

  • tools.build:sharedlinkflags 将被 _LINK_ 使用的额外的共享链接器标志列表。

  • tools.build:exelinkflags 将被 _LINK_ 使用的额外的可执行文件链接器标志列表。

  • tools.build:compiler_executables 类似字典的 Python 对象,它将编译器指定为键,将编译器可执行文件路径指定为值。这些键将按如下方式映射:

    • asm:将在 conannmaketoolchain.sh|bat 脚本中设置 AS

    • c:将在 conannmaketoolchain.sh|bat 脚本中设置 CC

    • cpp:将在 conannmaketoolchain.sh|bat 脚本中设置 CPPCXX

    • rc:将在 conannmaketoolchain.sh|bat 脚本中设置 RC

自定义环境

如果您的 Makefile 脚本需要 CL_LINK_ 之外的其他环境变量,则可以在调用 generate() 方法之前对其进行自定义。 调用 environment() 方法来计算上述变量,然后添加您需要的变量。 environment() 方法返回一个 Environment 对象

from conan import ConanFile
from conan.tools.microsoft import NMakeToolchain

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

    def generate(self):
        tc = NMakeToolchain(self)
        env = tc.environment()
        env.define("FOO", "BAR")
        tc.generate(env)

您还可以检查 NMakeToolchain 将注入到 conannmaketoolchain.sh|bat 脚本中的默认环境变量

from conan import ConanFile
from conan.tools.microsoft import NMakeToolchain

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

    def generate(self):
        tc = NMakeToolchain(self)
        env_vars = tc.vars()
        cl_env_var = env_vars.get("CL")