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

这些标志应作为前缀附加到标志变量。例如,如果 CONAN_LIB_FLAG 设置为 -l,则 CONAN_LIBS 变量将设置为 -lz

参考

class MakeDeps(conanfile)

生成一个 Makefile,其中包含使用指定项目构建项目所需的变量。

参数:

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

generate() None

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