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
以及构建设置 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 (默认为
[]
): 额外的 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")