MakeDeps

警告

此功能处于实验阶段,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。

MakeDeps 是 make 的依赖项生成器。它生成一个名为 conandeps.mk 的 Makefile 文件,其中包含有效的 Makefile 语法,其中列出了所有依赖项及其组件。

此生成器可以在 conanfile 中按名称使用

conanfile.py
class Pkg(ConanFile):
    generators = "MakeDeps"
conanfile.txt
[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.mkmake 格式文件,包含有效的 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-Z0-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

参考

class MakeDeps(conanfile)

使用指定的生成包含构建项目所需变量的 Makefile。

参数:

conanfile< ConanFile object > 当前配方对象。始终使用 self

generate() None

收集所有依赖项和组件,然后生成 Makefile