上一篇博客《conan入门(十六):profile template功能实现不同平台下profile的统一》以Android NDK交叉编译为例介绍了jinja模板在conan profile中的应用。如果针对不同的Android目标平台(armv7,armv8,x86,x86_64)都要维护一个profile也是挺麻烦的。本文在此基础上,更进一步改进将android NDK 对不同平台armv7,armv8,x86,x86_64交叉编译的profile基本于同一个模板统一实现
Conan是通用且便携的。它适用于所有操作系统,包括 Windows、Linux、OSX、FreeBSD、Solaris 等,并且可以针对任何平台,包括桌面、服务器以及嵌入式和裸机设备的交叉构建。它与 Docker、MinGW、WSL 等其他工具以及 CMake、MSBuild、Makefiles、Meson、SCons 等所有构建系统集成。它甚至可以与任何专有的构建系统集成。
Maven是Apache组织中的一个很成功的开源项目,Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。
看提示应该是在编译boost的依赖库libiconv/1.16报的错,在linux下交叉编译并不会报这个错误,
首先,不得不承认,cmake很强大,发展了这么多年,整个生态已经相当完善,功能也相当丰富,这点xmake目前是比不了的。
之前我写过的两篇博客《conan入门(十):Windows下Android NDK交叉编译Boost》,.《conan入门(十一):Linux下Android NDK交叉编译Boost》中介绍了在Linux和Windows下NDK交叉编译boost的过程
本文从一个示例开始:我们将创建一个使用cJSON应用程序来说明如何基于CMake 作为构建系统使用Conan无平台差异的引入依赖库。
我们经常需要从现有二进制文件创建包,比如第三方或供应商提供的C/C++库(只有include和lib),或在引入conan管理包之前手工编译编译好C/C++库。在这种情况下,我们并不需要conan从源代码编译,费时费事或根本不可能。所以以下情况我们可以考虑直接将本地已经编译好的二进制文件生成conan包:
作为为数不多的支持 GPU 的向量数据库产品,Milvus 2.3 在吞吐量和低延迟方面都带来了显著的变化,尤其是与此前的 CPU 版本相比,不仅吞吐量提高了 10 倍,还能将延迟控制在极低的水准。
Milvus 早期通过 FetchContent 和 ExternalProject 这些 CMake 内置方法自动下载依赖,在大部分情况下也够用,但随着 Milvus 内核的能力越来越丰富、依赖项也越来越多,例如要加入 Folly 使用它优化后的线程池、数据结构,要引入 opentelemetry-cpp 增强可观测性等。
在我的之前关于conan系列博客中,已经介绍过如何引用Conan中央仓库(conan-center)预定义的第三库(《conan入门(五):conan 交叉编译引用第三方库示例》),以及如何将自己的项目封装为Conan包以供第三方引用(《conan入门(七):将自己的项目生成conan包》)。
包管理器可以帮助你更方便地安装依赖关系,并决定所安装的版本,提高你的开发幸福感。许多语言都有自己的包管理器,像 Node.js 的 npm/yarn、Rust 的 Cargo、Python 的 pip 等等。当然,C/C++ 也有它自己的包管理器!下面我们就来感受下这些库的魅力和特点吧~
在之前的博客《conan入门(四):conan 引用第三方库示例》中我们以cJSON为例说明了如何在项目中引用一个conan 包。
Conan 2.0 版本已经发布很久了,配套的 cmake-conan 工具也同时得到了更新,在原有 Conan 1.x 版本上增强了功能,对开源项目和公司内部已有的 CMake 项目非常友好,接入简单。本文主要介绍 cmake-conan 的应用场景以及交叉编译的实战。
XMake是一个基于Lua的轻量级跨平台自动构建工具,支持在各种主流平台上构建项目。
上一篇博客《conan入门(九):NDK交叉编译自己的conan包项目塈profile的定义》中我们以jsonlib为例说明了如何NDK交叉编译自己封装成conan的模块及定义profile简化编译的方式。
它的语法简洁易上手,对新手友好,即使完全不会 lua 也能够快速入门,并且完全无任何依赖,轻量,跨平台。
对大型项目来说,必然会有很多的依赖项。特别是现代化的组件都会尝试去复用社区资源。而对于C/C++而言,依赖管理一直是一个比较头大的问题。 很多老式的系统和工具都会尝试去走相对标准化的安装过程,比如说用 pkg-config 或者用系统自带的包管理工具装在系统默认路径里。 当然这样很不方便,也不容易定制组件。我使用 cmake 比较多,所以一直以来在我的 atframework 项目集中有一个 utility 项目 atframe_utils,里面包含一些常用的构建脚本。 并且在 atsf4g-co 中实现了一些简单的包管理和构建流程。
“Conan 是我榜样。” 如果我在餐桌上说这句话,我儿子会以为我说的是游戏 “野蛮人柯南”,而我妻子会以为我说的是脱口秀主持人 Conan O'Brien。这种上下文混淆在 IT 中称为名称冲突。许多语言都有防止名称冲突的战略,PHP V5.3 也是这样。PHP 使用新的名称空间特性解决名称冲突问题。当然,PHP 要解决的冲突的名称并不是人名,而是类、函数和常量的名称。
在嵌入式平台开发中,我想将conan用作包管理器。例如,我想运行conan install将依赖库安装在在本地项目目录中,最好是直接安装到嵌入式平台供应商提供的SDK框架中,这样就可以直接利用SDK现成的编译架构完成最终程序编译生成镜像。所以我不希望从 ~/.conan 目录引用头文件和库。否则每次编译后都要手工复制库文件到SDK的文件夹中或要创建软连接,这都太麻烦了。
上一篇博客《conan入门(八):交叉编译自己的conan包项目》中我们以jsonlib为例说明了如何将交叉编译自己封装成conan的模块。但是使用的DS-5 ARM的交叉编译器(arm-linux-gnueabihf)并不常见,也不方便读者实际操作。
在编译到crypto/dso/dso_win32.c时报了一大堆错误,大概是这些:
应用使用正确的证书签名并使用 Apple 推荐的新公证手段公证后,将应用分发给其他人使用时,依然提示无法验证开发者,如下图所示:
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
最近工作的一个单片机项目项目,用了一款不知名的芯片,坑爹的开发商提供的编译器中有C++编译器,但是不能正常工作。好在我们的项目是纯C项目不需要C++编译器,只要在项目的cmake脚本中project命令指定为Cproject($NAME LANGUAGE C),这个坑就暂且绕过。
安装:https://cn.ubuntu.com/download/server/step1
上一篇博客《conan入门(十):Windows下Android NDK交叉编译Boost》中已经说明了Windows下Android NDK交叉编译Boost的全过程。
本文整理自Johannes Nicolai在JFrog 2019用户大会上的讲演《DevOps for Non-Hipsters(aka C/C++ programmers)》。
Xmake 是一个基于 Lua 的轻量级跨平台构建工具,关于 Xmake 与构建系统的介绍,我们已经在之前的文章中做了详细的介绍:C/C++ 构建系统,我用 xmake。
ZooKeeper是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
conan是个包管理工具,不仅仅支持cmake编译,还支持很多常用的构建工具如configure/make,msbuild,VisualStudo,meson,本文以NXP的Embedded RPC为例说明conan中如何使用make来构建项目。
1.适配Intent打开文件 在AndroidManifest.xml添加 <provider android:name="androidx.core.content.FileProvider" android:authorities="com.tmgp.sgame.conan.myapplication.fileprovider" android:grantUriPermissions="true"
从1.40.0版本开始conan new命令增加了一个新特性–预定义模板(Predefined templates),这不仅对于新手是个很友好的功能,对于所有conan的用户都是很有用的功能,大大减少了创建一个新conan包敲代码的工作量。
在上一篇博客《conan入门(四):conan 引用第三方库示例》中我们以cJSON为例说明了如何在项目中引用一个conan 包。那是比较简单的一种编译本机目标代码的应用场景(编译环境是Windows,目标代码也是Windows平台)。在物联应用的大背景下,C/C++开发中跨平台交叉编译的应用是非常广泛的。在使用conan来管理C/C++包(制品库)的环境下,如何实现对交叉编译的支持呢?因为我的工作涉及不少嵌入式平台的开发,conan对交叉编译的支持是我最关心的部分。
情人节刚过,我还是单身,我想了一下原因,是我的拍照技能不行,也有我对女神表白的套路太过老的原因,我没有体现出身为程序猿的优势,虽然我们拍照不行,但是我们 身为程序猿,可以改进我们拍照的质量,也可以有创新的表白方式,比如使用代码来提升照片的质量,将表白写进照片里,都是创意,提升表白的成功率。Python能不能帮我们实现这两个创意呢?of course,Python是万能的。我们可以使用pillow来实现我们的目标。
上一篇博客《conan入门(七):将自己的项目生成conan包》中我们以jsonlib为例说明了如何将自己的模块封装成conan提供给第三方使用。
“看!”席双嘉一边指着屏幕一边说,“终端窗口提示符的颜色,从绿变黄了。这就意味着代码在上次提交后有点变化。”
创建 Qt 工程时,我们通常使用 Qt 提供的 Online installer 安装 Qt Creator 和 Qt 库来创建、编译、发布 Qt 项目,这对开发环境和 CI Agent 环境有较强的要求,一旦环境安装不对或者安装时缺少了一些组件,可能导致无法编译出产物。最近一段时间,Qt 也拥抱 Conan,使我们可以通过 Conan 管理 Qt 库,这样我们就可以真正实现一套 CMake 脚本来管理和发布 Qt 的应用了。以下我们将演示如何通过 CMake + Conan 来组织 Qt 工程和实现程序的发布流程。
上回的故事里,我们的Java程序员赵可菲和C++程序员席双嘉,在Rust大神贾克强的指导下,一起掌握了rustup工具链的用法。
安装第三方库时,我们通常需要知道安装的库版本,那么conan提供了相应的搜索命令,列出相应库的版本。
linux中的包管理器 例如opencv.pc文件,详细描述了库的使用依赖。cmake的find_package支持pc文件的查找
R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教
当前,随着比较常用的组件,如Tomcat、Docker、Kubernetes等陆续曝出存在高危漏洞,组件安全已成为业界日益关注的安全扫描新的重要分支。必须在DevOps流程中加强针对组件的安全扫描,这也是当前业界推荐的DevSecOps的重要组成部分。
它基于 xmake 提供的运行时,但却是一个完整独立的包管理程序,相比 vcpkg/homebrew 此类包管理器,xrepo 能够同时提供更多平台和架构的 C/C++ 包。
它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
有的C/C++项目只包含头文件,不需要编译,对于这种情况如何封装为Conan的包呢?
领取专属 10元无门槛券
手把手带您无忧上云