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

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

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

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

conanfile.txt

[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

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》

conan系列文章

《conan入门(一):conan 及 JFrog Artifactory 安装》
《conan入门(二):conan 服务配置-密码管理及策略》
《conan入门(三):上传预编译的库(artifact)》
《conan入门(四):conan 引用第三方库示例》
《conan入门(五):conan 交叉编译引用第三方库示例》
《conan入门(六):conanfile.txt conanfile.py的区别》
《conan入门(七):将自己的项目生成conan包》
《conan入门(八):交叉编译自己的conan包项目》
《conan入门(九):NDK交叉编译自己的conan包项目塈profile的定义》
《conan入门(十):Windows下Android NDK交叉编译Boost》
《conan入门(十一):Linux下Android NDK交叉编译Boost》
《conan入门(十二):Windows NDK 编译 boost报错:CMake was unable to find a build program … MinGW Makefile》
《conan入门(十三):conan info 命令的基本用法》
《conan入门(十四):conan new 命令的新特性–模板功能(–template)》
《conan入门(十五):AttributeError: ‘CMake‘ object has no attribute ‘definitions‘》
《conan入门(十六):profile template功能实现不同平台下profile的统一》
《conan入门(十七):支持android NDK (armv7,armv8,x86,x86_64)交叉编译的统一profile jinja2模板》
《conan入门(十八):Cannot recognize the Windows subsystem, install MSYS2/cygwin or specify a build_require》
《conan入门(十九):封装第三方开源库cpp_redis示例》
《conan入门(二十):封装只包含头文件(header_only)的库示例》
《conan入门(二十一):解决MinGW编译Openssl的编译错误:crypto/dso/dso_win32.c》
《conan入门(二十二):编译 openssl要求python 3.7以上版本》
《conan入门(二十三):Windows下MinGW编译libcurl》
《conan入门(二十四):通过CONAN_DISABLE_CHECK_COMPILER禁用编译器检查》
《conan入门(二十五):imports将包安装到本地项目或其他指定位置》
《conan入门(二十七):因profile [env]字段废弃导致的boost/1.81.0 在aarch64-linux-gnu下交叉编译失败》
《conan入门(二十八):解决conan 1.60.0下 arch64-linux-gnu交叉编译openssl/3.1.2报错问题》

你可能感兴趣的:(conan,conan,imports,conanfile,local)