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
环境变量脚本,该脚本定义了 CL
、LIB
和 _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
环境变量脚本,该脚本将从配置文件(build_type、runtime、cppstd、来自 conf 的构建标志)推断出的标志注入到 NMake 可以理解的环境变量中:CL
和 _LINK_
。它还将生成一个 conanvcvars.bat
脚本,该脚本激活与 Conan 主机设置 arch
、compiler
和 compiler.version
匹配的正确 VS 提示,以及构建设置 arch
。
构造函数¶
def __init__(self, conanfile):
conanfile
:当前配方对象。始终使用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* 脚本中设置CPP
和CXX
。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")