conan是一个c++包管理工具。
C/C++为了兼容性,即一样的代码,用任何编译器都可以编译通过,然而编写c/c++程序。有百分30的时间都是在环境上打转,比如编译依赖库,修改环境以满足编译的要求,从需求来看极需要一个c/c++编译工程的专门管理性工具。 conan是目前最满足上述需求的轮子。
在c++开发中,常见的c++依赖形式有:
代码分发
二进制文件分发
同时在c++开发中开发者还需要为构建不同平台编译器,不同目标编译及运行时依赖,不同代码构建工具比如cmake,makefile,还有脚本化编译需要不同的PATH环境目录。
conan基于python脚本,在程序中修改上面需要修改的配置,用一个脚本conanfile.py来控制编译的方方面,用conan命令行来解析py脚本来实现编译,依赖组合,体现在了:
conan的缺点大概就是本身比c/c++的编译系统还复杂,也许搞懂这套编译系统,库早就编译出来了,更何况需要对包编写包脚本,大大加高了学习曲线。
anyway ,假如你的团队的代码是跨平台的大型底层库,需要有非常多的依赖,以及多平台的交付,那么用conan来管理程序编译环境是不错选择。
本文专门说明了 conan新建依赖包的细节。
conan的依赖管理实际上是提供了一套可复制的脚本,可以从无到有还原出依赖包生成的过程。
以开源库https://gitee.com/290198252/generallib为例
conan {子命令} 参数....
new Creates a new package recipe template with a 'conanfile.py' and optionally,
'test_package' testing files.
create Builds a binary package for a recipe (conanfile.py).
upload Uploads a recipe and binary packages to a remote.
export Copies the recipe (conanfile.py & associated files) to your local cache.
export-pkg Exports a recipe, then creates a package from local source and build folders.
test Tests a package consuming it from a conanfile.py with a test() method.
conan new generallib/1.0
完成后会在库目录下生成conanfile.py。
2. 修改confile.py
from conans import ConanFile, CMake, tools
class GenerallibConan(ConanFile):
name = "generallib"
version = "1.0"
license = "GPL"
author = "caiyuzheng"
url = "https://gitee.com/290198252/generallib"
description = "a simple cpp basic library"
settings = "os"
generators = "cmake"
exports_sources = "general*", "test*"
def build(self):
cmake = CMake(self)
cmake.configure(source_folder=".")
cmake.build()
def package(self):
self.copy("*", dst="include", src="general")
由于我们是打包自己编写的代码,代码也存在本地,因此就不需要source()方法来下载其他的包。
如果不是我们自己编写的代码,或者说希望这个包被第三方所使用,那么可以使用还需要source函数:
def source(self):
self.run("wget https://github.com/jbeder/yaml-cpp/archive/yaml-cpp-0.6.0.zip")
self.run("unzip yaml-cpp-0.6.0.zip .")
# This small hack might be useful to guarantee proper /MT /MD linkage
# in MSVC if the packaged project doesn't have variables to set it
# properly
tools.replace_in_file("hello/CMakeLists.txt", "PROJECT(HelloWorld)",
'''PROJECT(HelloWorld)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()''')
上面代码git clone了源代码,然后解压缩到了本地文件夹。
该函数在命令行执行conan source .
后执行,用于获取源代码包。
本地库路径如下图
exports_sources = "general*", "test*",exports_sources 属性指的是将这两个本地文件夹打包在包里面。
执行
conan export .
执行完成后在.conan的data目录下就会出现generalib1.0的库。
打开这个仓库的文件目录,可以看见export的general,test文件夹
在包文件目录下执行
# 先认证远程服务器
conan user conan user -p {密码} -r {远程服务器名} {用户名}
conan upload -r home generalib
过程如下
执行成功后在服务端的后台可以看到
自己上传的包文件
全部配置见
conanfile.py
下面说几个常见的配置及函数
conan source
的时候调用,作用是获取脚本化地待操作的源代码,有时候想把第三方库打包成conan repo,这个获取第三方库的流程,可能随着操作系统,编译器的不同而不同,写成脚本可以让依赖的使用者省去自己下载库的时间。首先执行export
conan export .
然后执行upload
conan upload --force -r home generallib
注意更新包,最好还是新建版本,这样就不会和旧的版本冲突。
在本地创建包的时候,就可以将包进行测试编译,操作如下
conan install . -pr msysgcc64
conan build .
执行build指令会调用conanfile.py中的build()函数
def build(self):
cmake = CMake(self)
print(cmake.generator)
self.run('cmake pkgsrc')
self.run('cmake --build pkgsrc --clean-first')
build方法无法指定profile,如果要测试build方法,使用conan create . -pr=profile,可以用于测试指定profile的编译。 conan提供了cmake huild helper对象 上述操作相当于在执行了
cmake . -G"XXX"; make clean;make;
方便的是conan会自动根据profile设定的编译器来推测generator。比如是windows下的gcc,他会自动推测-G"MinGW Makefiles"
环境变量CONAN_USER_HOME,指定conan数据文件目录。
本文假定generallib是一个纯源代码依赖包,使用者引入该依赖,仅仅是使用该包包含的源文件和头文件,不涉及到二进制库的打包,以及打包库的编译等操作,因此仅仅设置exports项,把本地源文件传入包即可。仅仅作为演示conan上传包的操作。
通信工程专业毕业,7年开发经验
精通c/c++
精通golang
熟悉常见的脚本,js,lua,python,php
熟悉电路基础,嵌入式,单片机
服务端开发
嵌入式开发
>gin接口代码CURD生成工具
sql ddl to struct and markdown,将sql表自动化生成代码内对应的结构体和markdown表格格式,节省宝贵的时间。
qt .ui文件转css文件
duilib xml 自动生成绑定控件代码
协议调试器
基于lua虚拟机的的协议调试器软件 支持的协议有:
串口
tcp客户端/服务端
udp 组播/udp节点
tcp websocket 客户端/服务端
软件界面
使用例子: 通过脚本来获得接收到的数据并写入文件和展示在界面上
下载地址和源码
webrtc easy demo
webrtc c++ native 库 demo 实现功能:
基于QT
webrtc摄像头/桌面捕获功能
opengl渲染/多播放窗格管理
janus meeting room
下载地址和源码
wifi,蓝牙 - 无线开关
实现功能:
通过wifi/蓝牙实现远程开关电器或者其他电子设备
电路原理图:
实物图:
深度学习验证工具
虚拟示波器
硬件实物图:
实现原理
基本性能
采集频率: 取决于外部adc模块和ebaz4205矿板的以太网接口速率,最高可以达到100M/8 约为12.5MPS
上位机实现功能: 采集,显示波形,存储wave文件。
参数可运行时配置
上位机:
显示缓冲区大小可调
刷新率可调节
触发显示刷新可调节
又一个modbus调试工具
最近混迹物联网企业,发现目前缺少一个简易可用的modbus调试工具,本软件旨在为开发者提供一个简单modbus测试工具。
主打一个代码简单易修改。
特点:
1. 基于QT5
2. 基于libmodbus
3. 三方库完全跨平台,linux/windows。
开源plutosdr 板卡
1. 完全开源
2. 提高固件定制服务
3. 硬件售价450 手焊产量有线
测试数据
内部DDS回环测试
接收测试
外部发送500MHZ FM波形
matlab测试
2TRX版本
大部分plutosdr应用场景都是讲plutosdr板卡作为射频收发器来使用。
实际上plutosdr板卡本身运行linux 操作系统。是具有一定脱机运算的能力。
对于一些微型频谱检测,简单射频信号收发等应用完全可以将应用层直接实现在板卡上
相较于通过网卡或者USB口传输具有更稳定,带宽更高等优点。
本开源板卡由于了SD卡启动,较原版pluto支持了自定义启动应用的功能。
提供了应用层开发SDK(编译器,buildroot文件系统)。
通过usb连接电脑,经过RNDIS驱动可以近似为通过网卡连接
(支持固件的开发定制)。
二次开发例子
```
all:
arm-linux-gnueabihf-gcc -mfloat-abi=hard --sysroot=/root/v0.32_2trx/buildroot/output/staging -std=gnu99 -g -o pluto_stream ad9361-iiostream.c -lpthread -liio -lm -Wall -Wextra -lrt
clean:
rm pluto_stream
版面分析即分析出图片内的具体文件元素,如文档标题,文档内容,文档页码等,本工具基于cnstd模型