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)
属性¶
对于所有依赖项及其组件中 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 变量前添加前缀,例如
-lCONAN_DEFINE_FLAG:在所有 defines 变量前添加前缀,例如
-DCONAN_SYSTEM_LIB_FLAG:在所有 system_libs 变量前添加前缀,例如
-lCONAN_INCLUDE_DIR_FLAG:在所有 include dirs 变量前添加前缀,例如
-ICONAN_LIB_DIR_FLAG:在所有 lib dirs 变量前添加前缀,例如
-LCONAN_BIN_DIR_FLAG:在所有 bin dirs 变量前添加前缀,例如
-L
这些标志应作为前缀附加到标志变量。例如,如果 CONAN_LIB_FLAG 设置为 -l,则 CONAN_LIBS 变量将被设置为 -lz。