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 中的 build flags)推断出的标志注入到 NMake 可以理解的环境变量中:CL 和 _LINK_。它还将生成一个 conanvcvars.bat 脚本,该脚本会激活与 Conan host 设置 arch、compiler 和 compiler.version 相匹配的正确 VS 提示,以及 build 设置 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(默认值为
[]):附加的 C 标志。extra_cxxflags(默认值为
[]):附加的 C++ 标志。extra_defines(默认值为
[]):附加的宏定义。extra_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")