MakeDeps¶
警告
此功能处于实验阶段,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。
MakeDeps
是 make 的依赖项生成器。它生成一个名为 conandeps.mk
的 Makefile 文件,其中包含有效的 Makefile 语法,其中列出了所有依赖项及其组件。
此生成器可以在 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)
属性¶
将为所有依赖项及其组件的 package_info() 中设置的每个属性生成 Makefile 变量。让我们看以下配方
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,因此它们会被跳过并显示警告。
自定义¶
标志¶
默认情况下,conandeps.mk
将包含所有列出的依赖项,包括它们的 cpp_info
信息,但不会将任何标志传递给编译器。
因此,使用者应将以下标志传递给编译器
**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 变量。例如,如果 CONAN_LIB_FLAG
设置为 -l
,则 CONAN_LIBS
变量将设置为 -lz
。