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,一经查实,立即删除!

相关文章

shell 脚本curl的时候,变量未被正确替换

有问题的脚本&#xff1a; updateRes\$(curl --location --request PUT http://172.16.80.88:3100/api/application/devopsBuildVersion \--header Authorization: bGFtcF93ZWJfcHJvOmxhbXBfd2ViX3Byb19zZWNyZXQ \--header Content-Type: application/json;charsetUTF-8 \--…

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

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

Day 28 MySQL的数据备份与恢复

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

利用PyTorch实现概率建模和贝叶斯推断

1.PyTorch概率建模和贝叶斯推断 在 PyTorch 上进行概率建模和贝叶斯推断通常涉及以下几个关键步骤&#xff1a; 定义概率模型&#xff1a;首先&#xff0c;你需要定义一个概率模型&#xff0c;该模型描述了数据生成的过程。在 PyTorch 中&#xff0c;这通常涉及到定义模型的参数…

JVM---垃圾回收

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

推荐算法详解

文章目录 推荐算法引言基于内容的推荐原理算法步骤注意点可以优化的地方示例代码讲解 协同过滤推荐原理算法步骤注意点可以优化的地方示例代码讲解 混合推荐系统原理算法步骤注意点可以优化的地方示例1代码讲解1示例2代码讲解2 基于知识的推荐原理算法步骤注意点可以优化的地方…

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

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

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

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

在线教育系统怎么留住用户,什么叫k12在线教育机构?它的价值是什么?

k12在线教育机构&#xff0c;近年来时常被人提起&#xff0c;当然&#xff0c;也有很多人对此不太熟悉&#xff0c;大众的印象仍然停留在传统教育的阶段&#xff0c;所以&#xff0c;什么叫k12在线?其实&#xff0c;弄的不太明白&#xff0c;所以&#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;该文件位于 …

gap意识

在学习的过程中&#xff0c;遇到一个知识点搞不懂&#xff0c;或是在工作的过程中&#xff0c;遇到一个难题解决不了&#xff0c;很多时候不是我们的能力不行或是智商不够&#xff0c;而是我们当前的认知与那个知识点或难题之间存在较大的 gap。比如&#xff0c;若没学过线性代…

最大9W升压型DCDC多串LED恒流驱动

描述 AP9234是一款由基准电压源、振荡电路、误差放大电路、相位补偿电路、电流限制电路等构成的CMOS升压型DC/DC LED驱动。由于内置了低导通电阻的增强型N沟道功率 MOSFET&#xff0c;因此适用于需要高效率、高输出电流的应用电路。另外&#xff0c;可通过在VSENSE端子连接电…

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…

JavaScript异步编程——08-Promise的链式调用【万字长文,感谢支持】

前言 实际开发中&#xff0c;我们经常需要先后请求多个接口&#xff1a;发送第一次网络请求后&#xff0c;等待请求结果&#xff1b;有结果后&#xff0c;然后发送第二次网络请求&#xff0c;等待请求结果&#xff1b;有结果后&#xff0c;然后发送第三次网络请求。以此类推。…

【ARM 嵌入式 C 入门及渐进 1.2 -- 是否为 n 字节对齐】

文章目录 是否为 n 字节对齐 是否为 n 字节对齐 在C语言中&#xff0c;你可以定义一个宏来检查一个给定地址是否是n字节对齐的。这里的n应该是2的幂&#xff08;例如&#xff0c;2、4、8、16等&#xff09;。要做到这一点&#xff0c;可以利用位操作的特性。具体地&#xff0c…

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

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