MakeDeps¶
警告
此功能是实验性的,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。
MakeDeps
是 make 的依赖生成器。它会生成一个名为 conandeps.mk
的 Makefile 文件,该文件包含有效的 make 文件语法,列出了所有依赖项,包括它们的组件。
此生成器可在 conanfile 中通过名称使用
class Pkg(ConanFile):
generators = "MakeDeps"
[generators]
MakeDeps
它也可以在 conanfile 的 generate()
方法中完全实例化
from conan import ConanFile
from conan.tools.gnu import MakeDeps
class App(ConanFile):
settings = "os", "arch", "compiler", "build_type"
requires = "zlib/1.2.13"
def generate(self):
pc = MakeDeps(self)
pc.generate()
生成的文件¶
名为 conandeps.mk
的 make 格式文件,包含有效的 makefile 文件语法。 prefix
变量会自动调整为 package_folder
CONAN_DEPS = zlib
# zlib/1.2.13
CONAN_NAME_ZLIB = zlib
CONAN_VERSION_ZLIB = 1.2.13
CONAN_REFERENCE_ZLIB = zlib/1.2.13
CONAN_ROOT_ZLIB = /home/conan/.conan2/p/b/zlib273508b343e8c/p
CONAN_INCLUDE_DIRS_ZLIB = $(CONAN_INCLUDE_DIR_FLAG)$(CONAN_ROOT_ZLIB)/include
CONAN_LIB_DIRS_ZLIB = $(CONAN_LIB_DIR_FLAG)$(CONAN_ROOT_ZLIB)/lib
CONAN_BIN_DIRS_ZLIB = $(CONAN_BIN_DIR_FLAG)$(CONAN_ROOT_ZLIB)/bin
CONAN_LIBS_ZLIB = $(CONAN_LIB_FLAG)z
CONAN_INCLUDE_DIRS = $(CONAN_INCLUDE_DIRS_ZLIB)
CONAN_LIB_DIRS = $(CONAN_LIB_DIRS_ZLIB)
CONAN_BIN_DIRS = $(CONAN_BIN_DIRS_ZLIB)
CONAN_LIBS = $(CONAN_LIBS_ZLIB)
属性¶
Makefile 变量将为所有依赖项及其组件的 package_info() 中设置的每个属性生成。让我们以以下收据为例
from conan import ConanFile
class MyLib(ConanFile):
name = "mylib"
version = "1.0"
def package_info(self):
self.cpp_info.set_property("my.prop", "some vale")
self.cpp_info.components["mycomp"].set_property("comp_prop", "comp_value")
生成的 makefile 变量赋值将如下所示
# mylib/1.0
#[...]
CONAN_PROPERTY_MYLIB_MY_PROP = some value
CONAN_PROPERTY_MYLIB_MYCOMP_COMP_PROP = comp_value
在将包名、组件名和属性名替换为 makefile 变量名时,名称将被转换为大写,并且除了 A-Z、0-9 和 _ 之外的所有字符都将被替换为 _(请参阅上面带有属性名中点的示例)。属性值不会被修改,它会被字面量放在变量赋值的右侧。任何空格和特殊字符都保持不变,不会应用引号或转义,因为 GNU Make 在转义空格方面不一致,并且无论如何都无法处理路径名中的空格。因为包含换行符的值会破坏 makefile,所以它们会被跳过并显示警告。
自定义¶
Flags¶
默认情况下,conandeps.mk
将包含所有列出的依赖项,包括它们的 cpp_info
信息,但不会将任何 flags 传递给编译器。
因此,消费者应该将以下 flags 传递给编译器
CONAN_LIB_FLAG: 为所有 libs 变量添加前缀,例如
-l
CONAN_DEFINE_FLAG: 为所有 defines 变量添加前缀,例如
-D
CONAN_SYSTEM_LIB_FLAG: 为所有 system_libs 变量添加前缀,例如
-l
CONAN_INCLUDE_DIR_FLAG: 为所有 include dirs 变量添加前缀,例如
-I
CONAN_LIB_DIR_FLAG: 为所有 lib dirs 变量添加前缀,例如
-L
CONAN_BIN_DIR_FLAG: 为所有 bin dirs 变量添加前缀,例如
-L
这些 flags 应该作为前缀附加到 flags 变量。例如,如果 CONAN_LIB_FLAG
被设置为 -l
,那么 CONAN_LIBS
变量将被设置为 -lz
。