conan
文章平均质量分 93
10km
这个作者很懒,什么都没留下…
展开
-
conan入门(三十九):conan 2.x 引用第三方库示例
去年写过一篇博客,以一引用cjson为例介绍如何使用conan管理第三方库的引用,但是当时使的conan最新版本是1.45,这一年多conan经过了很多的版本迭代,目前最新版本已经是2.0.14。conan 1.0和2.0版本有很多的差异。所以原来的文章内容已经不适合2.0,本文在原文的基础上,还是以cjson为例介绍如何在2.0下引用第三方库。原创 2023-12-21 10:52:41 · 2091 阅读 · 0 评论 -
conan 入门(三十八):conan二进制包的兼容性及自定义package_id的方式
conan二进制包的兼容性是指一个package是否可以满足当前profile中定义的settings,以及conanfile.py指定的options参数。默认情况下,conan在搜索一个依赖库匹配的二进制包(package)时,要求中所有参数都匹配,才算是一个兼容的包。conan会根据中提供的参数算出哈希值作为package_id。以确保二进制包的唯一性。简单说,的包就不能用于windows平台,同样,的包也不能用于msvc编译器。对于options。原创 2023-12-14 17:46:22 · 1270 阅读 · 0 评论 -
conan 入门(三十七):conan 2.x通过定义环境变量(environment)执行make编译只有Makefile的项目(erpcgen)
之前一篇博客介绍如何用实现来编译只有Makefile的项目,因为Autotools.make,Autotools.install方法就是执行make来编译项目。我原本是想用self.run来执行make进行编译的,因为去年编译erpcgen时,我就是用self.run来执行的(参见),那时conan 版本还是1.x,现在conan版本升级到2.x,不再兼容,原来的方式不能使用了,我一直没有搞明白如何合在conan 2.x下创建正确的环境变量,导致一直编译不成功。所以才摸索出用。原创 2023-12-13 17:48:57 · 1171 阅读 · 0 评论 -
conan入门(三十六):在set_version方法中从pom.xml中读取版本号实现动态版本定义
因为版本号是写死的,所以这种方式有局限性:比如我的java项目中版本号是在pom.xml中定义的,c++项目是java项目的子项目,如果java项目版本号升级了,我每次发布java版本的时候都需要手工修改conanfile.py中的才能让c++子项目的版本号与java项目的版本号同步更新,虽然不复杂,但增加了维护工作量,容易忘记。所以如果conanfile.py中定义的版本号能自动与pom.xml中的版本号同步是最好的解决办法,conanfile.py中的方法用就是用于实现动态版本号定义。原创 2023-12-11 10:21:03 · 1219 阅读 · 0 评论 -
conan 入门(三十五):在conanfile.py中获取C++编译器完整路径的方法
有的项目windows平台下构建时需要在msys2环境编译,而msys2也是可以有内置的c++编译器的。如果msys2中的c++编译器与profile中定义的gcc编译版本不一致。那么项目编译阶段可以正常通过,但在连接过程就有可能报错。因为如果项目的依赖库有C++库,那么它是按profile中定义的编译器版本提供的,就可能会因为符号表不匹配产生找不到引用的连接错误(undefiend reference)。原创 2023-12-05 17:15:23 · 1244 阅读 · 0 评论 -
conan 入门(三十四):conan 2.x实现对只有Makefile的项目(erpcgen)的封装示例
一些已有的较老旧的项目只有Makefile,一般在Linux下编译,windows下编译需要借助cygwin或msys2,对于这样的项目如何实现conanfile.py使用conan进行构建呢?本文以erpc/erpcgen为例,说明实现步骤。是一个适用于嵌入式系统的开源RPC框架,erpc/erpcgen为其下的IDL编译器,编译基于Makefile.现在需要把它封装为conan的package.这就是我最近遇到的问题。下面我们分步说明实现的要点。原创 2023-12-02 17:18:50 · 1296 阅读 · 0 评论 -
conan 入门(三十三):requirements()指定header的可见性(transitive_headers)
不过conan包的头文件可见性只能传递一代,即只能传递直接引用包的项目,不能跨代传递。所以CMakeDeps generator为turbo-jpeg生成的cmake配置文件中定义的import target中没有将依赖库的头文件位置定义到。要解决这个问题,就是要更新jpegwrapper的conanfile.py中对于依赖库的定义方式,通过。conan 允许在conanfile.py的requirements()方法中手工指定依赖包的特性。类型的依赖包,库文件可以向下传递,但头文件对于下游默认不可见的。原创 2023-11-24 16:57:18 · 1154 阅读 · 0 评论 -
conan 入门(三十二):package_info中配置禁用CMakeDeps生成使用项目自己生成的config.cmake
conanfile.py中定义的方法用于向package的调用者(conumer)提供包库名,编译/连接选项,文件夹等等信息,有了这些信息构建工具的generator就可以根据它们生成对应的文件,用于调用者引用package.比如基于cmake的CMakeDeps可以根据这些信息自动生成和调用者的CMakeLists.txt中通过就可以自动找到package.创建对应的import target.比如我为mnn 项目写的conanfile.py(原创 2023-11-24 11:26:25 · 1186 阅读 · 0 评论 -
conan入门(三十一):在命令行(shell)中从profile中读取配置参数
最近使用conan来执行本地或交叉编译时,我发现我需要知道当前profile定义的编译器的类型和版本以及平台,希望用profile中定义的os,arch,compier生成安装路径名如,该怎么实现呢?原创 2023-11-23 14:42:10 · 1333 阅读 · 0 评论 -
conan入门(三十):对腾讯ncnn进行Conan封装
是腾讯开源的一个为手机端极致优化的高性能神经网络前向计算框架。因为项目中需要用到它,所以我需要对它进行conan封装,以支持我们基于conan管理的项目的引用。ncnn代码比较成熟,项目结构清晰,对于conan封装的主要工作量就是将CMakeLists.txt脚本的option命令定义的开关在conanfile.py的options中定义为对应的conan 选项开关.原创 2023-09-26 14:06:20 · 363 阅读 · 0 评论 -
conan入门(二十九):对阿里mnn进行Conan封装塈conans.CMake和conan.tools.cmake.CMake的区别
去年写过一篇博客,当时通过自己写conanfile.py,实现了对第三方库cpp_redis的conan封装。当时使用的conan 1.45.0时过一年多,conan版本也经过了很多次升级,最新的版本是2.x,不过为了保持兼容现在我使用的版本是1.60.0。原创 2023-09-26 12:51:52 · 420 阅读 · 0 评论 -
conan入门(二十八):解决conan 1.60.0下 arch64-linux-gnu交叉编译openssl/3.1.2报错问题
大意就是编译器不支持arm架构,如下图看,编译器还是用的本机编译器,而不是armv8的交叉编译器aarch64-linux-gnu,解决了conan 1.60.0交叉编译boost/1.80.1的问题后,我继续交叉编译openssl/3.1.2时又报错了。我查看了boost/1.81.0的conanfile.py,确实在python脚本中创建并引用了。,而openssl/3.1.2的conanfile.py并没用引用。这个问题我在上一博客中明明已经解决了呀,不就是把profile中。来定义使用的编译器的,原创 2023-09-22 11:16:50 · 964 阅读 · 0 评论 -
conan入门(二十七):因profile [env]字段废弃导致的boost/1.81.0 在aarch64-linux-gnu下交叉编译失败
这个profile是我一年前写的,当时可以正确执行交叉编译,当然了,那个时候使用的conan 版本是1.45.0,一年多过去了,conan的版本迭代很快,目前我使用的是conan 1.x的接近最新版本1.60.0(1.x下当前最新版本是1.60.2),boost是由b2执行编译的,使用哪个编译器由环境变量CC来决定,CC定义在profile,所以问题应该出在profile.如下是执行aarch64-linux-gnu交叉编译使用的profile,的说明:从1.35.0开始新增加了这个字段,用于替换。原创 2023-09-22 10:50:08 · 1059 阅读 · 0 评论 -
conan入门(二十六):使用make编译erpc/erpcgen(makefile)
conan 使用make编译makefileconan是个包管理工具,不仅仅支持cmake编译,还支持很多常用的构建工具如configure/make,msbuild,VisualStudo,meson,本文以NXP的Embedded RPC为例说明conan中如何使用make来构建项目。NXP的eRPC (Embedded RPC) 是用于多芯片嵌入式系统和异构多核 SoC 的开源远程过程调用 (RPC) 框架。目前只支持make构建,我的一个项目中用到了它,因为访问github比较慢,我fork了一原创 2022-04-08 10:50:03 · 3135 阅读 · 0 评论 -
conan入门(二十五):imports将包安装到本地项目或其他指定位置
conan imports将包安装到本地项目或其他指定位置在嵌入式平台开发中,我想将conan用作包管理器。例如,我想运行conan install将依赖库安装在在本地项目目录中,最好是直接安装到嵌入式平台供应商提供的SDK框架中,这样就可以直接利用SDK现成的编译架构完成最终程序编译生成镜像。所以我不希望从 ~/.conan 目录引用头文件和库。否则每次编译后都要手工复制库文件到SDK的文件夹中或要创建软连接,这都太麻烦了。imports可以实现这个要求。imports将文件从 ~/.conan 目录原创 2022-03-28 09:55:01 · 3417 阅读 · 4 评论 -
conan入门(二十四):通过CONAN_DISABLE_CHECK_COMPILER禁用编译器检查
conan 通过CONAN_DISABLE_CHECK_COMPILER禁用编译器检查最近工作的一个单片机项目项目,用了一款不知名的芯片,坑爹的开发商提供的编译器中有C++编译器,但是不能正常工作。好在我们的项目是纯C项目不需要C++编译器,只要在项目的cmake脚本中project命令指定为Cproject($NAME LANGUAGE C),这个坑就暂且绕过。项目结构成型我打算将项目编译转为使用conan来管理。在安装项目的依赖库cjson的时候,出错了。cjson/1.7.15: Copying原创 2022-03-26 15:50:21 · 4821 阅读 · 0 评论 -
conan入门(二十三):Windows下MinGW编译libcurl
conan Windows下MinGW编译libcurlWindows平台用 conan 使用MinGW编译器编译libcurl,要如下执行CMD下执行$ conan install libcurl/7.80.0@ ^ -s compiler=gcc ^ -s compiler.version=5.2 ^ -e CC=P:\MinGW\mingw64\bin\gcc.exe ^ -e CXX=P:\MinGW\mingw64\bin\g++.exe ^ -o libcurl:with_uni原创 2022-03-20 23:39:25 · 1749 阅读 · 0 评论 -
conan入门(二十二):编译 openssl要求python 3.7以上版本
conan 编译 openssl要求python 3.7以上版本今天在Windows平台 如下用MinGW(5.2.0)编译openssl的时候$ conan install openssl/1.1.1m@ -s compiler=gcc -s compiler.version=5.2 --build missing 报错了:pkgconf/1.7.4: Applying build-requirement: ninja/1.10.2Downloading conan_sources.tgz原创 2022-03-20 19:34:54 · 4394 阅读 · 0 评论 -
conan入门(二十一):解决MinGW编译Openssl的编译错误:crypto/dso/dso_win32.c
conan: 解决MinGW编译Openssl的编译错误:crypto/dso/dso_win32.c今天在用conan使用MinGW编译openssl/1.1.k,执行如下命令:$ conan install openssl/1.1.1k@ -s compiler=gcc -s compiler.version=5.2 --build missing在编译到crypto/dso/dso_win32.c时报了一大堆错误,大概是这些:crypto/dso/dso_win32.c: In functi原创 2022-03-17 09:42:09 · 2297 阅读 · 0 评论 -
conan入门(二十):封装只包含头文件(header_only)的库示例
conan: 封装只包含头文件(header_only)的库示例有的C/C++项目只包含头文件,不需要编译,对于这种情况如何封装为Conan的包呢?Conan官方文档 《Package scaffolding for conan new command》给出了样例我就有这样一个项目 common_source_cpp收集了工作中常用的代码,以C/C++头文件形式为主,本文就以common_source_cpp为例说明如何实现conanfile.py将它封装为一个不需要编译只有头文件的Conan包。c原创 2022-03-16 17:06:58 · 1575 阅读 · 0 评论 -
conan入门(十九):封装第三方开源库cpp_redis示例
conan: 封装第三方开源库cpp_redis示例在我的之前关于conan系列博客中,已经介绍过如何引用Conan中央仓库(conan-center)预定义的第三库(《conan入门(五):conan 交叉编译引用第三方库示例》),以及如何将自己的项目封装为Conan包以供第三方引用(《conan入门(七):将自己的项目生成conan包》)。但是这个世界实际是复杂的,虽然Conan中央仓库已经收录了上千个常用的开源第三方库,但仍然有更多的第三库并没被Conan中央仓库收录,你不能指望你所需要的任何第三原创 2022-03-15 15:11:00 · 2640 阅读 · 2 评论 -
conan入门(十八):Cannot recognize the Windows subsystem, install MSYS2/cygwin or specify a build_require
conan:交叉编译libiconv报错Cannot recognize the Windows subsystem, install MSYS2/cygwin or specify a build_require to apply it.今天在Windows下执行NDK交叉boost时报错了:libiconv/1.16: WARN: Error running `configure --help`: Cannot recognize the Windows subsystem, install MSY原创 2022-03-11 15:35:19 · 1034 阅读 · 0 评论 -
conan入门(十七):支持android NDK (armv7,armv8,x86,x86_64)交叉编译的统一profile jinja2模板
上一篇博客以Android NDK交叉编译为例介绍了jinja模板在conan profile中的应用。如果针对不同的Android目标平台(armv7,armv8,x86,x86_64)都要维护一个profile也是挺麻烦的。本文在此基础上,更进一步改进将android NDK 对不同平台armv7,armv8,x86,x86_64交叉编译的profile基本于同一个模板统一实现原创 2022-03-09 12:30:58 · 3558 阅读 · 0 评论 -
conan入门(十六):profile template功能实现不同平台下profile的统一
#conan: profile template功能实现不同平台下profile的统一之前我写过的两篇博客《conan入门(十):Windows下Android NDK交叉编译Boost》,.《conan入门(十一):Linux下Android NDK交叉编译Boost》中介绍了在Linux和Windows下NDK交叉编译boost的过程在这两篇博客中针对Linux和Windows平台我定义了不同的profile文件,因为Linux和Windows的路径换行符不同,而且Linux和Windows下cla原创 2022-03-05 17:42:10 · 3906 阅读 · 0 评论 -
conan入门(十五):AttributeError: ‘CMake‘ object has no attribute ‘definitions‘
conan: AttributeError: ‘CMake’ object has no attribute ‘definitions’如下是一个简单的使用conan new加 --template参数指定模板为cmake_exe生成的构建exe程序的conan包定义脚本(参见我的上一篇博客《conan new 命令的新特性–模板功能(–template)》).conanfile.pyfrom conans import ConanFilefrom conan.tools.cmake import原创 2022-03-03 11:08:56 · 1188 阅读 · 0 评论 -
conan入门(十四):conan new 命令的新特性--模板功能(--template)
conan new 命令的新特性–模板功能(–template)从1.40.0版本开始conan new命令增加了一个新特性–预定义模板(Predefined templates),这不仅对于新手是个很友好的功能,对于所有conan的用户都是很有用的功能,大大减少了创建一个新conan包敲代码的工作量。对于像我这样一个Conan入门用户,对Python也不熟悉,一开始为了创建一个简单的Conan就要写一堆python代码实在是比较麻烦的事儿。而新增加的模板功能可以很方便的根据指定的模板创建一个特定应用场原创 2022-02-27 14:34:59 · 1666 阅读 · 0 评论 -
conan入门(十三):conan info 命令的基本用法
conan info 命令的基本用法conan info命令用于获取有关包的依赖关系图的信息。以thrift为例,如下查询thrift/0.13.0的依赖关系详情:$ conan info thrift/0.13.0@boost/1.78.0 ID: ff68d7a235dfb0d14c40ddef58cc716150cba5f6 BuildID: None Context: host Remote: conancenter=https://center.conan.i原创 2022-02-26 12:08:17 · 3023 阅读 · 0 评论 -
conan入门(十二):Windows NDK 编译 boost报错:CMake was unable to find a build program .... MinGW Makefile
今天在Windows平台如下正常执行conan NDK交叉编译Boost库时报了个错$ conan install boost/1.69.0@ -pr:h android_21_armv7a_clang -pr:b default --build missing错误日志如下,看样子是在编译依赖库bzip2时出错了,还没到编译boost的阶段原创 2022-02-25 15:51:21 · 2442 阅读 · 0 评论 -
conan入门(十一):Linux下Android NDK交叉编译Boost
上一篇博客《conan入门(十):Windows下Android NDK交叉编译Boost》中已经说明了Windows下Android NDK交叉编译Boost的全过程。本文在此基础上说明Linux下conan实现Android NDK交叉编译经常用到的的Boost库的过程。相比Windows平台,Linux下遇到的问题要少很多。只要正确定义profile就可以完成交叉编译。原创 2022-02-25 15:16:14 · 2795 阅读 · 0 评论 -
conan入门(十):Windows下Android NDK交叉编译Boost
上一篇博客《conan入门(九):NDK交叉编译自己的conan包项目塈profile的定义》中我们以jsonlib为例说明了如何NDK交叉编译自己封装成conan的模块及定义profile简化编译的方式。本文在此基础上说明Windows下如何使用conan实现Android NDK交叉编译经常用到的的Boost库。原创 2022-02-25 15:03:37 · 2926 阅读 · 0 评论 -
conan入门(九):NDK交叉编译自己的conan包项目塈profile的定义
上一篇博客《conan入门(八):交叉编译自己的conan包项目》中我们以jsonlib为例说明了如何将交叉编译自己封装成conan的模块。但是使用的DS-5 ARM的交叉编译器(`arm-linux-gnueabihf`)并不常见,也不方便读者实际操作。本文还以 jsonlib 为例,说明如何将自己的封装成conan的模块使用Android NDK实现交叉编译。原创 2022-02-20 11:54:29 · 1926 阅读 · 0 评论 -
conan入门(八):交叉编译自己的conan包项目
上一篇博客《conan入门(七):将自己的项目生成conan包》中我们以jsonlib为例说明了如何将自己的模块封装成conan提供给第三方使用。那是比较简单的一种编译本机目标代码的应用场景。在使用conan来管理C/C++包(制品库)的环境下,如何实现对conan包封装的项目实现交叉编译的支持呢?因为我的工作涉及不少嵌入式平台的开发,conan对交叉编译的支持是我最关心的部分。本文还以 jsonlib 为例,说明如何将自己的封装成conan的模块实现交叉编译。原创 2022-02-19 14:38:06 · 2985 阅读 · 4 评论 -
conan入门(七):将自己的项目生成conan包
conan 将自己的项目生成conan包Conan 是 C 和 C++ 语言的依赖项和包管理器。它是免费和开源的,适用于所有平台(Windows、Linux、OSX、FreeBSD、Solaris 等),可用于开发所有目标,包括嵌入式、移动(iOS、Android)和裸机。它还与 CMake、Visual Studio (MSBuild)、Makefiles、SCons 等所有构建系统集成,包括专有系统。它专为加速 C 和 C++ 项目的开发和持续集成而设计和优化。通过完整的二进制包管理,它可以为任原创 2022-02-19 12:18:44 · 6734 阅读 · 4 评论 -
conan入门(六):conanfile.txt conanfile.py的区别
conan conanfile.txt conanfile.py的区别在之前的博客《conan入门(四):conan 引用第三方库示例》中我们以cJSON为例说明了如何在项目中引用一个conan 包。conanfile.txt在这篇博客中我们为了引用cjson/1.7.13库,创建了一个conanfile.txt文件用于指定json_test.c程序的依赖库cjson[requires]cjson/1.7.13[generators]cmake关于conanfile.txt的详细说明参原创 2022-02-18 23:20:03 · 7483 阅读 · 4 评论 -
conan入门(五):conan 交叉编译引用第三方库示例
conan 交叉编译引用第三方库示例Conan 是 C 和 C++ 语言的依赖项和包管理器。它是免费和开源的,适用于所有平台(Windows、Linux、OSX、FreeBSD、Solaris 等),可用于开发所有目标,包括嵌入式、移动(iOS、Android)和裸机。它还与 CMake、Visual Studio (MSBuild)、Makefiles、SCons 等所有构建系统集成,包括专有系统。它专为加速 C 和 C++ 项目的开发和持续集成而设计和优化。通过完整的二进制包管理,它可以为任原创 2022-02-17 17:57:23 · 4455 阅读 · 0 评论 -
conan入门(四):conan 引用第三方库示例
conan 引用第三方库示例Conan 是 C 和 C++ 语言的依赖项和包管理器。它是免费和开源的,适用于所有平台(Windows、Linux、OSX、FreeBSD、Solaris 等),可用于开发所有目标,包括嵌入式、移动(iOS、Android)和裸机。它还与 CMake、Visual Studio (MSBuild)、Makefiles、SCons 等所有构建系统集成,包括专有系统。它专为加速 C 和 C++ 项目的开发和持续集成而设计和优化。通过完整的二进制包管理,它可以为任意数量的不原创 2022-02-17 17:51:00 · 10296 阅读 · 7 评论 -
conan入门(三):上传预编译的库(artifact)
conan 上传预编译的库(artifact)我们经常需要从现有二进制文件创建包,比如第三方或供应商提供的C/C++库(只有include和lib),或在引入conan管理包之前手工编译编译好C/C++库。在这种情况下,我们并不需要conan从源代码编译,费时费事或根本不可能。所以以下情况我们可以考虑直接将本地已经编译好的二进制文件生成conan包:当您无法从源代码构建包时(当只有预编译的库可用时)。在工件(artifact)开发阶段需要频繁打包提供另外的应用程序使用时。这时我只需要将编译好的工件原创 2022-02-17 17:39:50 · 5280 阅读 · 3 评论 -
conan入门(二):conan 服务配置-密码管理及策略
conan 服务配置密码管理及策略配置第一次以管理员身份(admin)使用默认密码(password)WEB登录入JFrog Artifactory后台时,系统就提示要求我修改密码,因为现有密码太简单不符合安全要求。因为刚开始测试就要设置个复杂的密码让我好一阵伤脑筋。我就在想JFrog Artifactory能不能修改默认的密码安全策略呢?作为一个成熟的已经商业化产品(不影响我们当前用的是免费的社区版),JFrog Artifactory是可以的。Artifactory的帐号管理体系,由JFrog原创 2022-02-17 17:36:41 · 6229 阅读 · 0 评论 -
conan入门(一):conan 及 JFrog Artifactory 安装
conan 安装Conan是一个面向 C 和 C++ 开发人员的软件包管理器。Conan是通用且便携的。它适用于所有操作系统,包括 Windows、Linux、OSX、FreeBSD、Solaris 等,并且可以针对任何平台,包括桌面、服务器以及嵌入式和裸机设备的交叉构建。它与 Docker、MinGW、WSL 等其他工具以及 CMake、MSBuild、Makefiles、Meson、SCons 等所有构建系统集成。它甚至可以与任何专有的构建系统集成。Conan 是完全免费和开源的,并且完全去中心化原创 2022-02-17 17:06:59 · 15919 阅读 · 17 评论