conan入门(三十九):conan 2.x 引用第三方库示例

本文介绍了如何在Conan2.0版本下,以cJSON为例,更新包引用和依赖管理,包括创建conanfile.txt、使用CMake构建项目以及conaninstall命令的最新用法。

去年写过一篇博客《conan入门(四):conan 引用第三方库示例》,以一引用cjson为例介绍如何使用conan管理第三方库的引用,但是当时使的conan最新版本是1.45,这一年多conan经过了很多的版本迭代,目前最新版本已经是2.0.14。
conan 1.0和2.0版本有很多的差异。所以原来的文章内容已经不适合2.0,本文在原文的基础上,还是以cjson为例介绍如何在2.0下引用第三方库。

conan 包命名约定

标准的conan 包名引用(reference)格式是:package_name/version,用于在制品仓库中唯一的识别一个包

  • package_name 包名
  • version 版本号

cJSON示例程序

示例的所有源码都保存在GIT仓库 conan_example,你可以跳过手工创建文件和文件夹的过程直接克隆代码到本地:
git clone https://gitee.com/l0km/conan_example.git

如下创建一个简单的cJSON的示例程序,以JSON格式输出使用的cJSON库的版本号:

json_test.c

#include "cjson/cJSON.h"
#include <stdlib.h>
#include <stdio.h>


int main(int argc, char** argv)
{
    char verbuf[32];
    snprintf(verbuf,sizeof(verbuf),"%d.%d.%d",CJSON_VERSION_MAJOR,CJSON_VERSION_MINOR,CJSON_VERSION_PATCH);
    cJSON* vj = cJSON_CreateString(verbuf);
    cJSON* rootj = cJSON_CreateObject();
    cJSON_AddItemToObject(rootj,"version",vj);
    char* jstr = cJSON_Print(rootj);
    printf("%s\n",jstr);
    free(jstr);
    cJSON_Delete(rootj);
    return 0;
}

conanfile.txt

创建conanfile.txt文件用于指定json_test.c程序的依赖库cjson

[requires]
cjson/1.7.13

[generators]
CMakeToolchain
CMakeDeps

因为本示例使用CMake构建项目所以[generators]定义CMakeToolchain,CMakeDeps用于后续conan install命令生成CMake相关的脚本
关于conanfile.txt的详细说明参见Conan官方文档《conanfile.txt》

conan search

创建conanfile.txt过程中我们可以通过conan search cjson -r conancenter查看远程conan中央仓库有哪些cJSON版本,然后决定自己能使用的版本

$ conan search cjson -r conancenter
Existing package recipes:

cjson/1.7.12
cjson/1.7.13
cjson/1.7.14
cjson/1.7.15
cjson/1.7.16

-r 参数用于指定搜索的远程仓库名字,如果不加 -r参数,则默认搜索本地仓库,-r all则指定在所有远程仓库搜索包

关于conan search命令的更详细用法参见Conan官方文档《conan search》

CMakeLists.txt

基于CMake构建项目就需要创建CMakeLists.txt脚本用于生成最终的编译工程文件:

cmake_minimum_required(VERSION 2.8.12)
project(JsonTest)

find_package(cJSON REQUIRED)
add_executable(json_test json_test.c)
target_link_libraries(json_test cjson::cjson)

这是个非常 简单的cmake脚本,与普通的cmake脚本,没有与conan相关的任何内容

conan install 安装依赖库

好了现在构建cJSON示例程序所需要所有文件json_test.c,conanfile.txt,CMakeLists.txt都已经准备齐了。我们需要执行conan install安装依赖库

$ mkdir build && cd build
$ conan install .. -of . --build missing
======== Input profiles ========
Profile host:
[settings]
arch=x86_64
build_type=Release
compiler=gcc
compiler.cppstd=gnu14
compiler.libcxx=libstdc++11
compiler.version=8
os=Linux

Profile build:
[settings]
arch=x86_64
build_type=Release
compiler=gcc
compiler.cppstd=gnu14
compiler.libcxx=libstdc++11
compiler.version=8
os=Linux


======== Computing dependency graph ========
Graph root
    conanfile.txt: /home/guyadong/workspace/conan_example/conanfile.txt
Requirements
    cjson/1.7.13#1f9d9a5c277925857929caff50f88f36 - Cache

======== Computing necessary packages ========
Requirements
    cjson/1.7.13#1f9d9a5c277925857929caff50f88f36:3bfccb3121a781d41dc5494d60bc05cb9f6811c3#dfe0e6e82bffcb17fb573c9422b4f405 - Cache

======== Installing packages ========
cjson/1.7.13: Already installed! (1 of 1)
WARN: deprecated: Usage of deprecated Conan 1.X features that will be removed in Conan 2.X:
WARN: deprecated:     'cpp_info.names' used in: cjson/1.7.13
WARN: deprecated:     'cpp_info.build_modules' used in: cjson/1.7.13

======== Finalizing install (deploy, generators) ========
conanfile.txt: Writing generators to /home/guyadong/workspace/conan_example/build
conanfile.txt: Generator 'CMakeToolchain' calling 'generate()'
conanfile.txt: CMakeToolchain generated: conan_toolchain.cmake
conanfile.txt: Preset 'conan-release' added to CMakePresets.json. Invoke it manually using 'cmake --preset conan-release' if using CMake>=3.23
conanfile.txt: If your CMake version is not compatible with CMakePresets (<3.23) call cmake like: 'cmake <path> -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=/home/guyadong/workspace/conan_example/build/conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Release'
conanfile.txt: CMakeToolchain generated: CMakePresets.json
conanfile.txt: CMakeToolchain generated: ../CMakeUserPresets.json
conanfile.txt: Generator 'CMakeDeps' calling 'generate()'
conanfile.txt: Generating aggregated env files
conanfile.txt: Generated aggregated env files: ['conanbuild.sh', 'conanrun.sh']
Install finished successfully

conan install命令用于安装下载配置项目(conanfile.py 或 conanfile.txt)要求的依赖库,本文示例的cJSON没有其他依赖库,如果依赖库自身还有别的依赖库,则递归下载编译所有依赖。执行conan install命令还会在当前目录中创建一堆的相关文件,如下:

cJSONConfig.cmake
cJSONConfigVersion.cmake
cJSON-release-x86_64-data.cmake
cJSON-Target-release.cmake
cJSONTargets.cmake
cmakedeps_macros.cmake
CMakePresets.json
conanbuildenv-release-x86_64.sh
conanbuild.sh
conanrunenv-release-x86_64.sh
conanrun.sh
conan_toolchain.cmake
deactivate_conanbuild.sh
deactivate_conanrun.sh

其中编译工具链文件conan_toolchain.cmake会在后面的被引用

在上面的执行conan install时指定..作为路径参数,即指定下载../conanfile.txt[requires]定义的所有依赖库。

补充

conan install还可用于安装指定引用的具体包,如下即安装cjson/1.7.13

conan install --requires=cjson/1.7.13 -r conancenter

关于 conan install更详细的说明参见Conan官方文档:《conan install》

build json_test

依赖库安装完成后,后续的项目编译就与普通的CMake编译项目过程没啥区别了:

生成编译工程文件(以gcc为例):

# 生成编译工程文件(以gcc为例):
$ cd build
$ cmake .. -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=RELEASE

编译项目

$ cd build
$ cmake --build . 

运行测试程序

$ cd build
$ ./json_test
{
    "version":      "1.7.13"
}

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入门(二十六):使用make编译makefile》
《conan入门(二十七):因profile [env]字段废弃导致的boost/1.81.0 在aarch64-linux-gnu下交叉编译失败》
《conan入门(二十八):解决conan 1.60.0下 arch64-linux-gnu交叉编译openssl/3.1.2报错问题》
《conan入门(二十九):对阿里mnn进行Conan封装塈conans.CMake和conan.tools.cmake.CMake的区别》
《conan入门(三十):对腾讯ncnn进行Conan封装》
《conan入门(三十一):在命令行(shell)中从profile中读取配置参数》
《conan 入门(三十二):package_info中配置禁用CMakeDeps生成使用项目自己生成的config.cmake》
《conan 入门(三十三):requirements()指定header的可见性(transitive_headers)》
《conan 入门(三十四):conan 2.x实现对只有Makefile的项目(erpcgen)的封装示例》
《conan 入门(三十五):在conanfile.py中获取C++编译器完整路径的方法》
《conan入门(三十六):在set_version方法中从pom.xml中读取版本号实现动态版本定义》
《conan 入门(三十七):conan 2.x通过定义环境变量(environment)执行make编译只有Makefile的项目(erpcgen)》
《conan 入门(三十八):conan二进制包的兼容性及自定义package_id的方式》
《conan入门(三十九):conan 2.x 引用第三方库示例》

内容概要:本文围绕“基于改进秃鹰算法的微电网群经济优化调度”展开研究,利用Matlab代码实现优化算法的仿真与复现。研究重点在于通过改进的秃鹰搜索算法(Bald Eagle Search Algorithm, BESA)解决微电网群在运行过程中的经济调度问题,提升算法的收敛速度与全局寻优能力,以实现对分布式能源、储能系统及负荷的高效协调管理。文中详细阐述了微电网群的系统架构、数学建模过程、目标函数设计(如运行成本最小化、碳排放降低等),并结合智能优化算法进行求解,验证了改进算法相较于传统方法在调度精度和效率方面的优越性。同时,研究还探讨了算法在多场景下的适应性,为微电网群的智能化、低碳化运行提供了技术支持与实践参考。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、智能优化算法相关工作的工程技术人员。; 使用场景及目标:① 学习并掌握改进秃鹰算法在复杂优化问题中的应用方法;② 实现微电网群经济调度模型的构建与求解;③ 对比不同智能算法在电力系统优化中的性能表现;④ 为科研论文复现、课题研究或工程项目提供算法支持与代码参考。; 阅读建议:建议读者结合文中提供的Matlab代码逐模块分析,重点关注算法改进策略与调度模型的耦合实现方式,同时可尝试在不同参数设置或场景条件下进行仿真实验,以加深对算法性能与调度效果的理解。
内容概要:本文围绕多旋翼无人机姿态估计算法的开发与性能评估展开系统性研究,重点对比了线性与非线性滤波算法在复杂飞行环境下的表现。通过构建基于扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)等先进算法的姿态估计器,融合IMU、磁力计、视觉传感器等多源数据,有效提升了姿态解算的精度与鲁棒性。研究涵盖了静态悬停、高速机动及磁干扰等多种典型飞行场景,利用MATLAB/Simulink平台完成仿真实验,并结合实测飞行数据与VICON高精度运动捕捉系统提供的真值进行定量分析。结果表明,非线性滤波器在动态工况下具有显著优势,尤其在抑制漂移和抵抗外部干扰方面优于传统线性方法。文章还提出了传感器融合、自适应建模、冗余配置等一系列降低偏差影响的技术路径,为高可靠性无人机导航系统的设计提供了理论依据与实践指导。; 适合人群:具备控制理论、信号处理及状态估计基础知识,从事无人机导航、控制算法研发或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于开发高精度无人机姿态解算模块;②为多传感器融合算法的设计、实现与验证提供参考案例;③服务于复杂环境下无人系统状态估计的教学演示与科研攻关; 阅读建议:建议结合文中所述MATLAB/Simulink仿真模型与实测数据集进行复现与调试,重点关注EKF与UKF的数学推导、实现细节及关键参数调优过程,深入理解非线性系统建模、状态估计与工程实际之间的平衡与折衷。
内容概要:本文针对面向低碳经济运行目标的多微网能量互联优化调度问题展开研究,提出了一种基于Matlab代码实现的多微网系统协同优化调度模型。该模型深度融合低碳与经济双重优化目标,通过构建多微网间的能量互联机制,实现跨区域分布式能源(如光伏、风电、储能系统等)的协同调控与资源高效配置,有效提升能源利用效率并降低系统碳排放水平。研究重点涵盖多源异构能源的协调运行策略、多目标优化问题的数学建模、约束条件的精细化处理,并采用先进优化算法进行求解,获得不同运行场景下的最优调度方案。文中提供了完整的Matlab仿真代码,详细展示了模型构建、算法实现与结果分析全过程,具有较强的可复现性与工程应用价值。; 适合人群:具备一定电力系统基础知识、优化理论背景及Matlab编程能力的研究生、科研人员以及从事微电网、能源互联网相关领域的工程技术人员。; 使用场景及目标:①开展多微网系统低碳经济调度的学术研究与仿真验证;②为微网能量管理系统(EMS)的算法开发与功能设计提供技术参考;③服务于科研论文复现、课题项目攻关及实际能源系统规划的前期仿真分析。; 阅读建议:建议读者结合Matlab代码进行模块化学习,重点关注目标函数的设计思路、系统约束的物理意义以及优化求解器的配置与调用过程,可尝试引入其他智能优化算法进行对比分析,以深入掌握多微网优化调度的核心机理与技术实现路径。
内容概要:本文系统介绍了电容钳位型多级逆变器中正弦脉宽调制(SPWM)技术的应用,重点围绕电容钳位拓扑结构实现三电平输出的核心原理展开分析。通过Matlab/Simulink平台构建仿真模型,详细阐述了该拓扑的工作机制、多电平电压生成过程以及SPWM调制策略的设计方法,展示了如何通过精确控制开关器件实现输出电压波形的多电平化与谐波有效抑制,从而提升逆变器在高压大功率应用场景下的输出质量与系统效率。该仿真模型不仅有助于理解电容电压平衡控制等关键技术难点,也为进一步优化控制算法提供了实验基础。; 适合人群:具备电力电子技术、电力系统分析等相关专业知识背景,熟悉Matlab/Simulink仿真环境,从事电气工程、自动化控制、新能源发电等领域研究的研究生、高校教师及工程技术人员。; 使用场景及目标:①深入理解电容钳位型多电平逆变器的拓扑结构特点与工作原理;②掌握SPWM调制技术在多电平逆变器中的具体应用与实现流程;③通过Simulink搭建并调试仿真模型,分析三电平输出电压波形及其总谐波畸变率(THD),评估控制策略性能;④为新能源并网、电机驱动、柔性输配电等领域的高性能逆变器设计与研究提供理论支持与技术参考。; 阅读建议:建议结合提供的Simulink仿真文件进行同步操作与验证,重点关注各功率开关管的驱动信号时序设计与直流侧钳位电容的电压均衡问题,深入分析不同调制参数对输出波形质量的影响,后续可尝试引入闭环控制策略或优化调制方式以进一步提升系统动态响应与稳定性。
打开链接下载源码: https://pan.quark.cn/s/fc134ec27b4e 金格软件公司推出的金格OFFICE控件是一款专为Web环境设计的组件,它能够支持Office文档的查看与编辑功能,并且常被企业机构应用于构建文档管理系统或在线办公平台。然而,一旦不再需要继续使用该控件,或者需要进行版本升级时,移除旧版本的操作就变得非常关键。接下来将系统性地阐述如何正确地卸载金格OFFICE控件,以及在这一过程中可能遭遇的各类挑战。 一、标准卸载流程 1. **借助控制面板进行卸载** - 启动Windows操作系统的控制面板,并在其中找到“程序”或者“程序和功能”的相关选项。 - 在所有已安装的程序列表中识别出“金格OFFICE控件”或者关联的ACTIVEX元素,选中后执行“卸载”指令。 - 按照系统提示逐步完成卸载任务,系统可能会提示需要重启计算机以彻底完成卸载操作。 2. **运用金格中间件卸载应用** - 针对名为“金格中间件卸载工具_标准产品”的压缩文件,这很可能是金格公司提供的专用卸载解决方案。 - 解压缩该文件包,并执行其中的卸载程序,根据界面上的指示进行操作,该工具能够自动检测并移除金格OFFICE控件及其相关组件。 - 卸载流程结束后,同样可能需要重启计算机。 二、常见挑战及应对策略 1. **卸载不彻底** - 当采用常规方法卸载后,若仍检测到金格OFFICE控件的残留部分,可以尝试借助第三方卸载工具如Revo Uninstaller,这类工具能够更深入地清除注册表及系统文件。 2. **注册表遗留问题** - 金格OFFICE控件在卸载后可能在注册表中留下键值记录,需要手动清理。通过打开注册表编辑器(regedit),仔细搜索与金格相关的...
内容概要:本文是一份关于科研仿真与优化技术的综合性资源介绍,系统涵盖了MATLAB/Simulink在智能优化算法、机器学习与深度学习、电力系统、信号处理、路径规划、无人机控制、图像处理、通信技术、雷达追踪、车间调度及元胞自动机模拟等多个前沿科研领域的应用。资源内容聚焦于通过先进算法(如GWO、PSO、NSGA-II、深度神经网络等)解决复杂工程优化问题,包含大量高水平期刊论文复现案例,涉及风电功率平抑、微电网经济调度、无人机三维路径规划、混合储能系统控制、电动汽车协同调度、故障诊断与信号处理等典型应用场景,并提供完整的代码实现与模型仿真支持。核心理念强调科研中“借力”工具与创新思维的重要性,在扎实理论基础上实现高效科研突破。; 适合人群:具备一定编程基础和科研能力的研究生、博士生及工程技术人员,特别适用于从事电力系统、自动化、人工智能、通信、交通运输、智能制造等相关领域研究的专业人员。; 使用场景及目标:① 复现高水平学术论文中的算法与仿真模型,提升科研可信度与效率;② 快速搭建复杂系统仿真环境,加速课题研究进程;③ 获取优化算法与控制策略的实际应用范例,支撑毕业设计、项目开发与学术创新;④ 推动科研成果向工程实践转化,增强研究的实用价值。; 阅读建议:建议读者按照目录结构系统性浏览,优先选择与自身研究方向契合的内容模块,结合所提供的Matlab/Python代码进行调试与改进,注重算法原理与实际工程背景的深度融合,以实现真正意义上的“借力科研”,激发创新灵感。
下载代码方式:https://pan.quark.cn/s/e5a5b5e9fd62 Creo 与 Teamcenter 集成安装指南 Creo 是一款由 PTC 公司研发的、功能丰富的三维计算机辅助设计(CAD)软件,被视为当前市场上最受欢迎的 CAD 工具之一。Teamcenter 是 Siemens 公司设计的一款产品生命周期管理(PLM)系统,其目的是协助企业更有效地管理产品的整个生命周期。本指南旨在指导用户完成 Creo 与 Teamcenter 的集成过程,从而达成更高效的产品设计、开发及管理流程。 一、Creo(客户端)的安装 Creo 安装流程的关键环节涵盖选择许可证服务器的配置、确定安装路径、以及安装所有相关组件等。用户在开始安装前,必须确保许可证服务器的详细信息已准备妥当,并选定一个合适的安装路径。在安装阶段,用户需持续点击“下一步”按钮以推进安装进程。安装作业完成后,Creo 客户端将部署在用户指定的文件夹内。 二、Creo 集成(客户端)的安装 Creo 集成安装流程的核心步骤包括指定安装路径、设定安装位置、挑选 Teamcenter 的版本号、以及设定 Creo 启动文件夹的位置。用户应选择一个适宜的安装路径,明确安装位置,选择恰当的 Teamcenter 版本,并设定 Creo 启动文件夹的具体位置。安装期间,用户需确认“Yes”以创建必要的文件夹,并点击“Next”继续安装。安装作业结束后,Creo 集成模块将部署在用户设定的文件夹中。 三、JT 转换(客户端)的安装 JT 转换流程的主要步骤涉及选定 Creo translator 工具、确定文件路径、以及选择预设配置等。用户需选定一个合适的 Creo translator 工具...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值