conan入门(二十五):imports将包安装到本地项目或其他指定位置

2022-04-13 12:35:15 浏览数 (1)

conan imports将包安装到本地项目或其他指定位置

在嵌入式平台开发中,我想将conan用作包管理器。例如,我想运行conan install将依赖库安装在在本地项目目录中,最好是直接安装到嵌入式平台供应商提供的SDK框架中,这样就可以直接利用SDK现成的编译架构完成最终程序编译生成镜像。所以我不希望从 ~/.conan 目录引用头文件和库。否则每次编译后都要手工复制库文件到SDK的文件夹中或要创建软连接,这都太麻烦了。

imports可以实现这个要求。imports将文件从 ~/.conan 目录复制到指定位置。因此,通过简单的两行代码,就可以将所有依赖项(头文件、库)复制到当前项目也可以复制到你指定的其他位置。只需将其添加到项目的conanfile.txt或 conanfile.py ,示例如下:

conanfile.txt

代码语言:javascript复制
[requires]
cjson/1.7.13
[imports]
include, * -> ./deps/include
lib, * -> ./deps/lib

include,lib为复制文件的源文件夹,必须是个相对路径,即为所有依赖库在本地仓库的相对文件夹

*为指定要复制文件的通配符,如*.h,*.a

./deps/include,./deps/lib为文件复制的目标文件夹,可以是个绝对路径,如果不是绝对路径,那么视为相对于当前项目文件夹的相对路径

上面的例子,将项目的所有依赖库(cjson)的include,lib下所有文件分别复制到项目文件夹的deps/include,deps/lib

下面是个更灵活的例子,将所有依赖库(.a,.h)文件复制到环境变量DK_PREFIX定义的SDK 安装位置

conanfile.py

代码语言:javascript复制
import os,re ## 用于读取环境变量和正则表达式判断变量的布尔值 
from conans import ConanFile, CMake

class YourProjectConan(ConanFile):
    ####################################
	# 定义imports方法实现依赖库导入到指定位置
	def imports(self):
        # 环境变量IMPORT_TO_SDK如果设置为True
        # 复制依赖库所有.a,.h文件到环境变量SDK_PREFIX定义的SDK 位置的子文件夹Third-party下
        if re.match(r'^(?:true|on|1|y(es))?$',os.getenv("IMPORT_TO_SDK","False"),re.I):
            self.copy("*.[ah]", dst=os.path.join(os.getenv("SDK_PREFIX"),"Third-party",self.name  "-deps"), src="")    

参考资料

《Installing packages to local project #137》

《imports()》

《[imports]》

《conan_check_compiler()》

《CONAN_DISABLE_CHECK_COMPILER》

0 人点赞