conan2 基础入门(06)-conanfile.py入门

conan2 基础入门(06)-conanfile.py入门

文章目录

  • conan2 基础入门(06)-conanfile.py入门
  • ⭐准备
    • 预备文件和Code
  • ⭐使用
    • 流程指令
  • ⭐具体讲解
    • conanfile.py
    • conan install
  • END
    • 视频教学

⭐准备

注意,如果想跟好的学习conanfile.py建议使用python来安装conan。

当然使用其他方式安装也是有效果的。

安装教程:conan2 基础入门(02)-安装-CSDN博客

预备文件和Code

文件名预览

:.
│  CMakeLists.txt
│  conanfile.py
└─ main.cpp

main.cpp

#include <json/json.h>#include <iostream>void test_env() {std::cout << ">>>" << __func__ << std::endl;std::cout << "sizeof(void*) = " << sizeof(void *) << std::endl;
#if defined(_MSC_VER)// msvc的判断方式
#ifdef _DEBUGstd::cout << "Debug version" << std::endl;
#elsestd::cout << "Release version" << std::endl;
#endifstd::cout << "_MSC_VER = " << _MSC_VER << std::endl;
#endif
}void test_jsoncpp(void) {std::cout << ">>>" << __func__ << std::endl;Json::Value up;up["name"]     = "cuber-lotus";up["bilibili"] = "https://space.bilibili.com/8172252";std::cout << "up: " << up << std::endl;
}int main(void) {test_env();test_jsoncpp();
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(mydemo CXX)set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)find_package(jsoncpp REQUIRED)add_executable(${PROJECT_NAME} main.cpp)target_link_libraries(${PROJECT_NAME} JsonCpp::JsonCpp)

conanfile.py

import osfrom conan import ConanFile
from conan.tools.files import copyclass MyConanFile(ConanFile):'''继承 class ConanFile'''settings = "os", "compiler", "build_type", "arch"generators = "CMakeToolchain", "CMakeDeps"# 设置`shared`属性可以为[True, False]options = {"shared": [True, False]}# 为options中的属性设置默认值default_options = {"shared": True}def requirements(self):self.requires("jsoncpp/1.9.5")def generate(self):# 如果采用动态库的方式# 将动态库复制到可执行文件目录下if not self.options.shared:returnfor dep in self.dependencies.values():for depDll in dep.cpp_info.bindirs:print(">>>")print(">>>", depDll)print(">>>")copy(self, "*.dll", depDll,os.path.join(self.source_folder, "bin/Release"))

⭐使用

流程指令

@REM -o jsoncpp*:shared=True 在conan install 命令行显示的指定动态库
conan install . --output-folder=build --build=missing -o jsoncpp*:shared=Truecd buildcmake .. -G "Visual Studio 16 2019" -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake"cmake --build . --config Releasecd ../bin/Releasemydemo.exe

⭐具体讲解

conanfile.py

首先这是一个脚本性质的文件,不是一个完整运行的程序。

重点在于from conan import ConanFile

class 继承(ConanFile)

我们只需要继承class ConanFile进行特化即可。

settings

这里对应好使用的profile文件的内容

settings = "os", "compiler", "build_type", "arch"

generators

这里是为了使用cmake。于conanfile.txt中的generators一致。

generators = "CMakeToolchain", "CMakeDeps"

options

选项设置,属于辅助变量。规定当前的脚本需要的选项。

# 设置`shared`属性可以为[True, False]
options = {"shared": [True, False]}

default_options

默认的属性,与options对应。

# 为options中的属性设置默认值
default_options = {"shared": True}

requirements()

The requirements() method is used to specify the dependencies of a package.

requirements() 方法用于指定包的依赖项。

    def requirements(self):self.requires("jsoncpp/1.9.5")

generate()

This method will run after the computation and installation of the dependency graph.

This means that it will run after a conan install command, or when a package is being built in the cache, it will be run before calling the build() method.

该函数会在计算和安装依赖图后运行。

这就意味着这会在conan install执行之后运行,或者当一个包在缓存中构建之后,generate()会在build()前运行。

    # 注:此处是与本文最上面的精简版。def generate(self):# 将动态库复制到可执行文件目录下for dep in self.dependencies.values():for depDll in dep.cpp_info.bindirs:copy(self, "*.dll", depDll,os.path.join(self.source_folder, "bin/Release"))

conan install

指定生成动态库

在python脚本中的选项仅是做脚本编码时的辅助。

真正需要指定生成动态库需要在conan install执行中指定。

conanfile.txt也可以这么操作,但其本身支持在配置中指定动态库。

conan install . 			\--output-folder=build 	\--build=missing 		\-o jsoncpp*:shared=True



END

视频教学

conan2.0 基础入门 (主流的C/C++包管理工具)_哔哩哔哩_bilibili

关注我,学习更多C/C++,算法,计算机知识

B站:

👨‍💻主页:天赐细莲 bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++入门系列-构造函数

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会…

Day 28 MySQL的数据备份与恢复

数据备份及恢复 1.概述 ​ 所有备份数据都应放在非数据库本地&#xff0c;而且建议有多份副本 备份&#xff1a; 能够防止由于机械故障以及人为误操作带来的数据丢失&#xff0c;例如将数据库文件保存在了其它地方 冗余&#xff1a; 数据有多份冗余&#xff0c;但不等备份&…

JVM---垃圾回收

目录 一、C/C的内存管理 二、Java的内存管理 三、垃圾回收的对比 四、Java的内存管理和自动垃圾回收 五、方法区的回收 手动触发回收 六、堆回收 如何判断堆上的对象可以回收&#xff1f; 引用计数法 可达性分析算法 五种对象引用 软引用 软引用的使用场景-缓存 弱引用 虚…

机柜风扇KTS011温湿度控制器KTO011风机控制温控器机械开关温控仪

品牌&#xff1a;威驰 型号&#xff1a;KTS011常开 产地&#xff1a;中国大陆 颜色分类&#xff1a;KTS011常开,KTO011常闭 KTS011与KTO011的区别 KTS011&#xff0c;常开型&#xff0c;可搭配风扇/风机使用&#xff1a;当环境温度超过温控器设定温度&#xff0c;温控…

数据结构与算法===贪心算法

文章目录 定义适用场景柠檬水找零3.代码 小结 定义 还是先看下定义吧&#xff0c;如下&#xff1a; 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。 适用场景 由于…

Kafka的安装及接入SpringBoot

环境&#xff1a;windows、jdk1.8、springboot2 Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ 1.概述 Kafka 是一种高性能、分布式的消息队列系统&#xff0c;最初由 LinkedIn 公司开发&#xff0c;并于2011年成为 Apache 顶级项目…

C语言-课程管理系统-大作业

C语言编写课程管理系统 1 需求分析2 需要查的知识点3 数据结构和基础函数功能3.1 课程数据结构3.2 菜单和选择项3.3 从文件中加载课程信息到内存3.4 将内存中的课程信息保存到文件3.5 将输入的字符串格式化为课程信息结构体 4 主要功能函数4.1 录入课程信息函数4.2 浏览课程信息…

2024全新小狐狸AI免授权源码

源码安装说明&#xff1a; 下 载 地 址 &#xff1a; runruncode.com/php/19757.html 1. 在宝塔新建一个站点&#xff0c;选择 PHP 版本为 7.2、7.3 或 7.4。将压缩包上传到站点的根目录&#xff0c;并设置运行目录为 /public。 2. 导入数据库文件&#xff0c;该文件位于 …

Python装饰器带括号和不带括号的理解

装饰器是 Python 中一个强大且灵活的特性&#xff0c;允许用户在不修改原有函数或类定义的基础上&#xff0c;为其增加额外功能。 今天在尝试自定义 Python 装饰器的时候遇到了一个问题&#xff0c;因为以前一直是使用装饰器&#xff0c;基本没有自定义过装饰器&#xff0c;所…

vue3点击添加小狗图片,vue3拆分脚本

我悄悄蒙上你的眼睛 模板和样式 <template><div class"XueXi_Hooks"><img v-for"(dog, index) in dog1List" :src"dog" :key"index" /><button click"addDog1">点我添加狗1</button><hr …

WPF之工具栏菜单栏功能区。

1&#xff0c;菜单栏&#xff0c;工具栏&#xff0c;状态栏。 1.1&#xff0c;Menu中可添加菜单分隔条<Separator></Separator>作为分割线&#xff0c;使用Separator可以通过改变其template来自定义&#xff0c;Separator是无焦点的&#xff0c;如果简单的在MenuIt…

品鉴中的平衡之美:如何欣赏红酒的口感与风格和谐

品鉴云仓酒庄雷盛红酒的过程&#xff0c;是对其口感与风格和谐的追求和欣赏。平衡是红酒品质的重要标志之一&#xff0c;它体现在红酒的色泽、香气、口感和余味等多个方面。通过欣赏红酒的平衡之美&#xff0c;我们可以更好地领略其精妙之处&#xff0c;感受其带来的美妙滋味。…

【Unity Animation 2D】Unity Animation 2D骨骼绑定与动画制作

一、图片格式为png格式&#xff0c;并且角色各部分分离 图片参数设置 需要将Sprite Mode设置为Single&#xff0c;否则图片不能作为一个整体 1、创建骨骼 1.1 旋转Create Bone&#xff0c;点击鼠标左键确定骨骼位置&#xff0c;移动鼠标再次点击鼠标左键确定骨骼&#xff0c…

大数据面试题第一期*4

题1、HDFS存储机制 &#xff08;1&#xff09;客户端向namenode请求上传文件 &#xff0c;namenode检查目标文件是否已存在 &#xff0c;父目录是否存在。 &#xff08;2&#xff09;namenode返回是否可以上传。 &#xff08;3&#xff09;客户端请求第一个 block上传到哪几个d…

嵌入式C语言高级教程:实现基于STM32的智能健康监测手环

智能健康监测手环能够实时监控用户的生理参数&#xff0c;如心率、体温和活动量&#xff0c;对于健康管理和疾病预防非常有帮助。本教程将指导您如何在STM32微控制器上实现一个基本的智能健康监测手环。 一、开发环境准备 硬件要求 微控制器&#xff1a;STM32L476RG&#xf…

RS3236-3.3YUTDN4功能和参数介绍及PDF资料

RS3236-3.3YUTDN4功能和参数介绍及PDF资料-公司新闻-配芯易-深圳市亚泰盈科电子有限公司 品牌: RUNIC(润石) 封装: XDFN-4-EP(1x1) 描述: 带过温保护 输出类型: 固定 最大输入电压: 7.5V 输出电压: 3.3V 最大输出电流: 500mA RS3236-3.3YUTDN4 是一款低压差线性稳压器&#x…

PX4FMU和PX4IO最底层启动过程分析(下)

PX4FMU和PX4IO最底层启动过程分析&#xff08;下&#xff09; PX4FMU的系统启动函数为nash_main(int argc,char *argv[]) PX4IO的系统启动函数为nash_start(int argc,char *argv[]) PX4FMU启动函数nash_main(int argc,char *argv[]) 首先分析一下nash_main(int argc,char *a…

高效视频剪辑:视频批量调色,如何利用色调调整提升效率

在视频剪辑的后期处理中&#xff0c;调色是一个至关重要的环节。它不仅能够改变视频的整体氛围和风格&#xff0c;还能够突出视频的重点&#xff0c;增强观众的视觉体验。然而&#xff0c;对于大量的视频素材进行逐个调色处理&#xff0c;无疑会耗费大量的时间和精力。我们可以…

软件安装及YOLOv8环境配置及验证

先附上本章中所用到的软件及环境安装包&#xff0c;还有YOLOv8各任务权重&#xff1a; 软件及环境配置链接&#xff1a;https://pan.baidu.com/s/1-n2HJybicA6vW1YXfGRtcA 提取码&#xff1a;6vh8 YOLOv8各权重&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1ApYUrJ_s…

C++相关概念和易错语法(12)(迭代器、string容量调整)

1.迭代器&#xff08;以string为例&#xff09; &#xff08;1&#xff09;基本理解&#xff1a;在我们刚接触迭代器的时候&#xff0c;我们可以将迭代器理解为改造过的“指针”&#xff0c;这是一个新的类型&#xff0c;指向对应容器中的各个元素。我们可以像指针那样对迭代器…