- 博客(662)
- 资源 (102)
- 收藏
- 关注
原创 Zed 官方博客:GPUI 的所有权与数据流(注释精讲版)
文章摘要 本文深入探讨了 Rust 严格的所有权系统在构建用户界面(如 Zed 编辑器)时带来的挑战,并介绍了 GPUI 框架如何通过引入 Entity 和观察/订阅机制来解决这些问题。文章详细解析了 Entity 作为间接引用句柄的工作原理,以及如何通过 update 方法安全地修改状态。此外,还阐述了 observe 和 notify 机制如何实现动态数据流,包括订阅关系的生命周期管理(如 detach 方法的应用)。通过代码示例,展示了如何构建响应式 UI 组件,同时保持 Rust 的所有权安全性和性
2026-08-04 22:10:28
1236
原创 Rust GPUI 桌面应用开发入门:界面交互和事件响应
本文以示例程序为基础,深入细致地介绍了 GPUI 如何实现用户交互,如何响应键盘和鼠标事件,以及焦点系统是如何工作和设置的。同时,深入探讨了一些框架的设计理念,如 Action 的定位和功能,事件响应函数的形式约束等。
2026-07-31 08:00:00
639
原创 Rust GPUI 桌面应用开发入门:创建项目和概念讲解
Zed提供的create-gpui-app工具可快速创建GPUI应用原型。通过cargo install create-gpui-app安装后,支持生成简单项目或Workspace结构。添加GPUI依赖有三种方式:使用crates.io版本、直接引用Zed项目Git库或本地Zed项目路径。初始化应用需调用application().run(),其中通过open_window方法配置窗口并设置根组件。运行流程为:创建应用实例→执行用户回调(打开窗口)→渲染组件树。注意GPUI库迭代快,需注意版本适配,当前基于
2026-07-27 22:07:49
1289
原创 如何在大型项目中灵活切换 Git 的 Branch 和 Tag?
本文介绍了在使用Git命令行和JetBrains IDE(如IntelliJ IDEA/RustRover)时,高效管理大型项目分支与标签的操作方法。Git命令行部分重点讲解了分支切换(git switch)、标签查看(git tag)、最新版本查找(sort -Vr)等实用技巧,并强调了在"detached HEAD"状态下的注意事项。IDE操作部分展示了如何通过VCS Group快速切换分支/标签。针对大型项目常见的多版本场景,文章提供了从检出项目到跟踪新版本的完整工作流,比较了命令行与IDE在排序、搜
2026-07-27 08:00:00
332
原创 Rust 日志终极指南:Tracing 概念、架构、配置和全套示例代码
本文共1万7千字,12张配图,10个完整可执行的示例代码完整地解释了tokio-rs/tracing的核心概念,包括Span、Event和Subscriber,解释了整体架构和两套日志API的区别。示例代码演示了所有常见场景,并可复用于实际项目。
2026-07-23 20:27:23
1236
原创 51CTO,一个抄袭剽窃的流氓网站!
51CTO网站被曝系统化剽窃原创内容,采用篡改标题、多账号分散转载等手段隐秘盗用CSDN、知乎等平台的技术文章,并在文中植入自家课程广告。多个活跃多年的"爬虫账号"累计阅读量超百万,形成规模化内容搬运体系。原创作者反映维权困难,网站客服处理滞后。在AI技术冲击传统技术内容生态的背景下,这种剽窃行为严重打击创作者积极性。业内人士担忧,随着AI问答取代传统搜索,技术内容创作生态将面临更大挑战。
2026-07-20 09:45:13
2376
原创 使用 Playwright + GitHub Actions 完成一些页面自动化任务的初步探索(下)
本文介绍了自动化反抄袭工具中解决网站登录认证的几种方案,重点阐述了通过导出和复用Cookie实现认证的方法。文章详细说明了如何导出Cookie、在Playwright中加载Cookie验证登录状态,以及如何通过CSS选择器模拟用户点击操作。同时,提供了两种判断操作执行成功的方法:基于DOM元素出现或消失的判定策略。最后提及GitHub Actions工作流的注意事项,并指出Playwright脚本复用性较差的特点。整体呈现了一个完整的自动化测试流程解决方案。
2026-07-20 09:00:00
857
原创 使用 Playwright + GitHub Actions 完成一些页面自动化任务的初步探索(上)
本文介绍了一种利用Playwright和GitHub Actions构建反抄袭自动化脚本的MVP方案。作者因长期受剽窃困扰(如51CTO官方抄袭事件),决定开发定期检测脚本。技术方案选用Node.js环境下的Playwright实现浏览器自动化,通过GitHub Actions实现免费托管调度。文章详细记录了项目搭建过程:包括初始化Playwright项目、配置TypeScript运行时、编写基础脚本验证可行性,并重点探讨了CSDN登录验证的三种技术路线(模拟登录/状态持久化/读取本地配置),指出当前网站风
2026-07-16 08:45:00
966
原创 使用 Clap 编写 Rust 命令行 CLI 程序(覆盖所有参数解析类型)
Rust 命令行解析工具 Clap 使用指南 摘要 本文介绍了 Rust 生态中最流行的命令行参数解析工具 Clap 的基本使用方法。文章首先明确了命令行中的关键概念:命令(Command)、子命令(Subcommand)、位置参数(Argument)、选项(Option)和开关(Flag)。然后通过实际示例演示了如何使用 Clap 的 Derive 特性简化命令行解析: 创建示例项目并添加 Clap 依赖 实现基本的位置参数解析 为位置参数设置默认值 处理可为空的参数 将位置参数转换为具名选项(Optio
2026-07-10 22:18:20
916
原创 Rust “多态”的来龙去脉(下):dyn Trait ( Trait Object ) 到底是什么东西?
Rust 动态分发的底层实现:通过胖指针和虚函数表实现多态调用。文章以“猫狗喵汪叫”示例为切入点,深入分析了 &dyn Trait 的转换过程: 当 &Dog 转换为 &dyn Soundable 时,编译器会生成一个包含两个指针的胖指针 胖指针的一头指向原始数据,另一头指向编译期生成的虚函数表(vtable) vtable存储在程序的只读数据段(.RODATA),包含具体实现的函数指针 动态分发通过查询vtable找到正确的函数实现并调用 dyn Trait必须通过引用或智能指针使用,因为需要携带额外的类
2026-07-02 09:00:00
1693
原创 Rust “多态”的来龙去脉(上):静态分发与动态分发
Rust 通过 trait 和泛型实现多态,主要依赖静态分发(编译期单态化)和动态分发(运行期 Trait Object)两种机制。静态分发为每个具体类型生成独立代码,实现零成本抽象;动态分发则通过 dyn Trait 在运行时决定调用哪个实现,适用于无法预知具体类型的场景(如 GUI 应用)。文章通过"猫狗喵汪叫"示例对比两种方式,并指出动态分发的典型应用场景——当用户行为决定具体类型时(如图形编辑工具),必须使用 Trait Object 存储异构类型集合。正确理解这两种分发机制,是掌握 Rust 多态
2026-06-29 09:00:00
751
原创 Rust 颠覆过你的面向对象编程世界观吗?
文章摘要: Rust 对传统面向对象特性进行了创新取舍:放弃 class 和继承,转而采用 struct + trait + impl 的组合机制实现面向对象设计。作者分析了这一设计背后的逻辑——传统 OOP 中 class 承载过多功能导致耦合,继承破坏封装性。Rust 通过解耦数据(struct)与行为(trait),用组合替代继承,配合泛型实现多态。文章还介绍了 Rust 独特的面向对象"玩法":枚举变体作为对象、通过 trait 实现类型扩展、关联类型等特性。作者认为语言设计需要权衡取舍,开发者应基
2026-06-26 08:00:00
1312
原创 Rust 语言特性:关联类型
本文介绍了Rust中关联类型(Associated Types)的概念及其与泛型的区别。关联类型允许将类型占位符与trait绑定,由实现者指定具体类型,避免了泛型在某些场景下的类型参数爆炸问题。文章通过支付网关的示例说明,当某个类型天然对应唯一相关类型且使用者需要频繁引用时,使用关联类型(如Payment trait中的Req和Resp)能显著简化API设计,减少冗余的类型参数传递,而泛型实现则会导致接口臃肿。关联类型的关键优势在于其类型由实现者而非调用者决定,适合表达类型固有的内部关系。
2026-06-24 10:23:57
600
原创 脑洞大开!Rust 借用检查和流计算也能扯上关系?
本文通过大数据流计算中的"状态"(State)概念,类比解释了Rust借用检查权限模型的工作原理。作者指出,Rust中的R(可读)、W(可写)、O(可拥有)权限本质上类似于流计算中维护的状态标志位,编译器会随着代码执行动态更新这些标志位:创建引用时检查对应权限标志位是否允许,并根据借用规则即时更新状态。这种"状态维护+实时检查"的机制,与流计算引擎处理数据流时维持和更新状态信息的模式高度相似。文章通过具体示例展示了这一思想如何帮助理解Rust借用检查的底层逻辑,建议读者结合相关技术文章深入理解权限模型的运作
2026-06-22 09:22:39
475
原创 Rust 语言特性:闭包
文章摘要:本文深入探讨了Rust中的闭包特性,从基础概念到高级应用。闭包作为函数式编程的核心概念,在Rust中表现为可捕获自由变量的匿名函数。文章通过示例展示了闭包的基本语法和惰性求值机制,解释了Rust闭包通过所有权系统处理捕获变量的独特方式,包括按值捕获(move闭包)和按引用捕获(不可变/可变引用)。特别强调了函数式编程中闭包作为一等公民的价值,以及Rust在编译期通过借用检查器保证闭包安全性的设计哲学。本文是理解Rust函数式编程特性的重要参考。
2026-06-17 10:39:16
1438
原创 Rust 语言特性:循环引用与弱指针 Weak<T>
本文探讨了Rust中智能指针的循环依赖问题及其解决方案。文章首先通过一个示例展示了Rc<T>和RefCell<T>组合使用时的循环引用场景,其中两个数据结构相互持有对方的共享指针导致内存无法释放。随后分析了强引用计数的变化过程以及由此引发的内存泄漏问题。最后提出使用Weak<T>弱指针替代Rc<T>来打破循环依赖,通过Rc::downgrade()方法将共享指针降级为弱指针,从而避免循环引用导致的资源泄漏问题。文章还推荐了相关技术文章供读者进一步学习Rust的借用检查、生命周期等核心概念。
2026-06-15 10:49:29
1082
原创 Rust 语言特性:内部可变性(关于 Cell<T> 和 RefCell<T>)
Rust中的内部可变性允许在不可变结构体内部修改特定字段,主要使用Cell<T>和RefCell<T>两种智能指针实现。Cell<T>通过复制或替换整个值实现修改,不暴露内部引用;RefCell<T>则通过运行时借用检查提供可变引用。典型应用场景包括:结构体部分字段需可变(如商品状态)、实现&self方法中修改内部状态(如消息通知系统)。两者关键区别在于值操作方式(整体替换vs引用修改)和借用检查时机(编译期vs运行期)。内部可变性在保证内存安全的同时,提供了更灵活的数据修改能力。
2026-06-12 09:27:49
882
原创 Rust 语言特性:共享指针 Rc<T>
本文介绍了Rust中的共享指针Rc<T>及其引用计数机制。通过对比Box<T>在cons list实现中的所有权限制,展示了Rc<T>如何允许多个所有者共享数据。关键点包括: Rc<T>通过引用计数实现共享所有权,不要求独占数据所有权 使用Rc::clone()会增加强引用计数而非深拷贝 通过strong_count()可查看当前引用数 最后一个Rc指针销毁时会释放堆数据 与C++的shared_ptr原理类似,但需注意Rust特有的所有权规则 文中还提及了Weak<T>弱引用的存在,为后续深入讨论留下伏笔
2026-06-10 09:09:42
898
原创 Rust 语言特性:智能指针 Box<T>
本文介绍了Rust中智能指针的概念及其应用,重点分析了Box<T>这一基础智能指针。作者指出Rust通过Box<T>等机制避免直接操作裸指针带来的内存隐患,并以递归类型cons list为例,说明如何用Box<T>解决类型无限递归问题。当定义递归类型时,Box<T>作为间接层能固定类型大小,将实际数据存储在堆上,而指针本身(固定大小)存储在栈上,从而满足编译要求。文中示例展示了使用Box<List>构建可编译通过的递归链表,体现了Rust通过智能指针实现内存安全的核心理念。
2026-06-08 08:47:07
968
原创 再借用(Reborrow):Rust 借用检查的高级话题还是智力游戏?
本文介绍了Rust中的"再借用"(Reborrow)概念。再借用发生在对一个通过引用访问的地方再次创建引用时,编译器会将新引用视为从原引用派生的引用,而非独立的新引用。通过权限模型分析,再借用会导致原引用暂时失去读写权限,直到新引用生命周期结束。文章通过代码示例展示了再借用的工作流程和权限转移过程,并解释了Rust支持再借用的必要性——这使得接受可变引用参数的函数能够被正常调用。再借用是Rust所有权系统中一个重要的概念,理解它有助于更好地掌握Rust的借用检查机制。
2026-06-05 08:47:01
631
原创 你真得懂 Rust 借用检查吗?一文聊透 Borrow Checker 底层逻辑:权限模型
本文深入解析了Rust借用检查的底层权限模型,通过Aquascope工具的可视化标注系统揭示了编译器如何通过R(读取)、W(写入)、O(拥有)三种权限标志位实施严格的借用规则。文章详细阐述了值权限与引用权限的差异,解引用权限的特殊性,以及权限如何随引用创建/失效动态变化。重点指出权限实际附着在访问路径而非内存位置上,解释了同一内存位置不同访问方式可能拥有不同权限的现象。通过完整示例展示了权限模型如何精确描述借用检查的实时状态变化,为理解Rust所有权系统提供了编译器视角的底层洞察。
2026-06-03 15:15:40
2066
原创 Rust 错误处理:panic! 和 Result
Rust错误处理机制解析:使用panic!处理不可恢复错误,通过Result<T, E>处理可恢复错误。panic!会终止程序执行,可通过设置RUST_BACKTRACE环境变量查看调用栈回溯。Result枚举将错误显式编码为返回值,配合模式匹配进行细粒度错误处理。unwrap和expect方法提供了快捷处理方式,分别在错误时直接panic或自定义错误信息。这种设计强调显式错误处理,避免隐式异常控制流,提高代码可靠性。
2026-06-01 09:49:59
798
5
原创 Rust 语言特性:常用集合
本文介绍了Rust中两种重要的集合类型Vector和HashMap的基本操作。Vector是动态数组,支持尾部压入(push)和弹出(pop)操作,可通过索引或get方法访问元素,注意可变引用与不可变引用的使用限制。HashMap通过insert方法插入键值对,get方法返回Option类型,entry.or_insert方法实现条件插入。文章还展示了如何利用枚举在Vector中存储不同类型,以及遍历、更新集合的常用方法。这些集合类型都遵循Rust的所有权规则,在需要时使用引用进行操作。
2026-05-27 10:49:12
732
原创 深入理解 Rust 生命周期(可能是全网最透彻的解读了)
本文通过生动的代码示例和清晰的逻辑分析,深入浅出地讲解了Rust生命周期的核心概念。作者首先以一个悬垂引用的例子引出生命周期标注的必要性,然后系统性地阐述了四条关键规则:引用生命周期不能超过被引用值、生命周期是编译期概念、引用传播生命周期依赖而值会截断依赖、多输入引用时输出引用的生命周期是输入引用的交集。文章特别强调要区分编译期静态分析和运行时动态执行的思维差异,并指出生命周期标注的本质是帮助编译器进行借用检查。通过将抽象概念具象化为伪代码标注,作者为读者提供了理解Rust生命周期的有效"抓手",使这个原本
2026-05-26 12:09:38
2366
原创 Rust 语言特性:Deref Trait 和 解引用
Rust中的解引用机制通过Deref trait实现,与C++的指针解引用不同。Rust的引用附加了生命周期、借用规则等安全机制。实现Deref trait的自定义类型(如MyBox)需要通过deref()方法返回内部值的引用,编译器会自动处理解引用操作。强制解引用转换功能允许类型自动转换为目标类型的引用,减少手动使用&和*操作符的需要。转换过程中会保持或收紧引用的可变性,但不会放宽限制。这一机制使智能指针的使用更加简洁安全。
2026-05-26 08:54:20
1048
2
原创 深入理解 Rust 生命周期(可能是全网最透彻的解读了)
这篇文章深入浅出地讲解了Rust生命周期机制的核心概念和关键规则。作者通过生动的代码示例,揭示了生命周期标注的本质是帮助编译器进行借用检查,防止悬垂引用。文章重点阐述了四个核心规则:(1)引用的生命周期不能超过被引用值的生命周期;(2)生命周期是编译期概念;(3)值会截断生命周期依赖;(4)输出引用的生命周期是所有输入引用生命周期的交集。作者特别强调理解"为什么需要生命周期标注"这个核心问题,通过伪代码形象展示了编译器如何分析变量作用域来判断引用有效性。文章为学习Rust生命周期提供了清晰的思维框架和实用的
2026-05-25 08:46:07
972
原创 Rust 语言特性:impl 与 方法
本文探讨了不同编程语言中"函数"和"方法"的概念差异,重点分析了Rust语言的实现方式。在Rust中,通过impl块为结构体定义的方法实际上是与类型关联的函数集合,而非传统意义上的成员函数。文章以Rectangle结构体为例,展示了如何定义和使用带有&self参数的方法来计算面积,并解释了self参数的不同形式(&self/&mut self/self)对所有权的影响。同时介绍了关联函数的概念,说明其作为构造函数的使用方式。Rust的方法调用语法虽然简洁,但底层实现与传统面向对象语言存在显著差异,体现了Ru
2026-05-22 08:50:41
822
原创 Rust 工程结构 和 Cargo 核心概念
本文介绍了Rust项目的工程结构核心概念,包括crate、package、module、path和workspace。crate是最小编译单元,分为binary和library两种类型;package包含Cargo.toml元数据和至少一个crate;module用于代码组织,支持内联、单文件和目录三种形式;path分为绝对路径和相对路径用于模块引用;workspace用于管理复杂项目的多个crates。文章通过示例展示了典型Rust项目的目录结构和模块树关系,强调了Rust"约定大于配置"的设计理念。
2026-05-21 08:58:38
1015
原创 Rust 语言特性:Trait
Rust中的Trait系统是其类型系统的核心组成部分,它定义了类型的行为规范。本文系统介绍了Trait的定义、实现和使用方法: Trait定义行为规范,可以包含默认实现或抽象方法。定义时需考虑行为抽象的设计合理性。 为类型实现Trait使用impl Trait for Type语法,可以覆盖默认实现或补充抽象方法实现。 Trait作为参数时需使用impl Trait语法或更明确的Trait Bound语法<T: Trait>,后者能确保多个参数类型一致。 可通过+指定多个Trait约束,使用where子句简
2026-05-18 09:13:26
1060
2
原创 使用 Cargo 命令行创建一个 Workspace 项目
摘要:本文介绍了在Cargo暂不支持直接创建工作区的情况下,如何通过变通方法创建Rust工作区。具体步骤包括:1) 使用cargo new创建同名crate;2) 删除src目录并修改Cargo.toml为工作区配置;3) 调整.gitignore文件;4) 在工作区目录下创建子crate。最后还提到可通过RustRover将项目一键分享到GitHub。这种方法利用了cargo new自动初始化git的特性,简化了工作区创建流程。
2026-05-14 09:07:28
293
原创 Rust 语言特性:泛型
本文介绍了Rust中泛型的使用方式。首先展示了在函数中使用泛型实现最大值查找功能,通过<T: PartialOrd + Copy>限定类型范围。其次说明了结构体中的泛型应用,支持单类型或多类型参数。然后回顾了枚举中使用泛型的典型例子Option<T>。接着讲解了方法中的泛型实现,包括结构体泛型与方法泛型的关联使用。最后解释了Rust采用"单态化"实现泛型,通过编译器为每种具体类型生成专门代码,确保零性能损失。全文通过代码示例详细说明了Rust泛型在不同场景下的应用
2026-05-13 09:55:56
878
原创 深入理解 Rust 所有权
Rust的所有权机制是其内存管理的核心创新,通过编译期严格检查确保内存安全。本文从底层堆栈知识入手,解释了所有权产生的背景:当多个变量指向同一堆内存时,传统语言面临释放时机的难题。Rust的解决方案是确立"唯一所有者"原则,当所有权转移时原变量失效,并在所有者离开作用域时自动调用drop释放资源。该机制依赖三大语言特性:自动析构机制保证资源释放,编译期检查确保所有权转移合规,以及Copy trait区分复制语义。所有权转移不仅发生在赋值时,也存在于函数参数传递和返回值场景。这种设计既避免
2026-05-12 09:17:01
2272
2
原创 Rust 语言特性:枚举
Rust枚举类型深度解析:从基础到高级应用 Rust中的枚举(Enum)是一种强大的类型系统特性,它不仅是简单的常量集合,更是结构体的容器与选择器。枚举成员可分为三类:类单元结构体型、普通结构体型和元组结构体型,每种都对应不同的数据结构。枚举值可以是唯一常量(无数据成员)或多个实例(有数据成员)。 枚举与泛型的结合尤为强大,标准库中的Option<T>就是典型代表,它优雅地处理了可能为空的值,避免了繁琐的空值检查。枚举与模式匹配的配合更是Rust的亮点,提供了清晰直观的分支处理语法。 特别值得注
2026-05-11 09:18:32
846
原创 GitHub 1.2 万星 Qt 项目 VNote 源码解读(七):In-Place Preview 模式
VNote 的 In-Place Preview 模式支持在编辑窗口中直接预览图片、公式和流程图等元素。该模式通过将原始 Markdown 文本传送到前端 Js 环境渲染后返回图片数据实现预览,与 Typora 的即时渲染模式不同。实现涉及前后端多个 C++ 和 Js 类,执行链路复杂。预览功能默认开启,由界面开关和应用配置共同控制。三种预览类型(CodeBlock、Math、ImageLink)分别通过不同信号触发,其中 CodeBlock 预览采用防抖动设计,延迟 1000 毫秒执行以避免高频渲染。整体
2026-05-07 08:19:22
580
原创 C++ 编程技巧:使用 Enum 作为数组 / 容器索引
C++中枚举类型作为数组/容器索引是一种高效编程技巧。相比Java枚举的类特性,C++枚举本质是整型值,这使得它们能直接作为数组索引使用。关键实现要点包括:枚举值默认从0开始匹配数组索引,额外定义MaxSource表示数组大小。这种设计相比使用Map具有明显优势:下标访问速度快、无键不存在问题、节省存储空间。实际案例展示了如何用枚举索引管理预览类型配置数据,体现了C++枚举的实用价值。
2026-05-06 08:54:32
514
原创 C++ 编程技巧:基于位标志(Bit Flags)的枚举类型设计
摘要:本文介绍了基于位标志(Bit Flags)的枚举类型设计方法。通过将枚举值设置为2的幂次方(如0x1,0x2,0x4),可以使用位运算高效处理多个枚举值的组合。文章详细讲解了三种核心位运算操作:用"|"组合多个值、用"&"判断是否包含某个值、用"^"移除某个值。同时介绍了Qt框架中Q_DECLARE_FLAGS和Q_DECLARE_OPERATORS_FOR_FLAGS宏的使用,它们能为枚举类型提供类型安全的位运算支持。最后通过Lin
2026-05-05 08:27:36
897
原创 GitHub 1.2 万星 Qt 项目 VNote 源码解读(六):加载和渲染 Markdown 文本时的同步机制
VNote 在加载和编辑 Markdown 文档时,通过两个同步机制确保操作顺序:1) 使用 m_ready 标志和待执行队列 m_pendingActions 控制 HTML 模板加载期间的 C++ 操作,待 Js 环境初始化完成后执行积压操作;2) 使用计数器 numOfOngoingWorkers 控制 Markdown 文本渲染期间的前端 Js 操作,采用"最后写入优先"策略处理并发请求。这两个机制分别解决了 Js 环境初始化依赖和 DOM 元素渲染依赖的问题,通过时序控制保证了
2026-05-04 09:00:59
696
原创 GitHub 1.2 万星 Qt 项目 VNote 源码解读(五):滚动文本
本文介绍了VNote中Markdown文本滚动的实现机制,主要分为按行滚动和按锚点滚动两种方式。按行滚动通过markdown-it插件为元素添加行号属性,利用二分查找定位目标节点后执行滚动;按锚点滚动则是通过标题ID实现快速跳转。文章重点分析了滚动操作的同步机制,通过worker计数器和pendingData缓存确保滚动操作在渲染完成后执行。整个流程展示了VNote如何实现编辑器与预览视图间的精准行号同步跳转功能。
2026-04-28 09:34:34
2011
原创 使用 vcpkg 包管理器安装库后如何查询包名(Package Name)和 导入目标(Imported Target)?
本文介绍了在CMake项目中正确使用第三方库的方法。关键点包括:1)包名(Package Name)即vcpkg安装目录下share文件夹中的子目录名;2)导入目标(Imported Target)可通过查找xxxConfig.cmake文件中add_library命令中的::标识来确定。具体操作步骤为:首先在vcpkg的share目录下查找对应库的文件夹名作为find_package参数,然后在库的Config文件中查找包含::的目标名称用于target_link_libraries。这种方法特别适用于缺
2026-04-27 08:51:24
634
原创 C++ / CMake 工程多模块的组织方式
本文介绍了大中型C++项目的模块化组织结构设计方法。通过CMake实现模块化管理,推荐采用分层目录结构:顶层CMakeLists.txt配置全局设置,src目录管理主程序,子模块(core/utils/common)各自独立。关键实现方式包括:使用add_subdirectory添加子模块,target_include_directories设置头文件路径,target_sources管理模块源文件。这种模式既保持了代码的逻辑内聚性,又实现了清晰的物理隔离,特别适用于应用程序(非库)项目开发,具有良好的可扩
2026-04-24 09:22:13
322
The.Art.of.Multiprocessor.Programming.Revised.Reprint
2014-02-06
Domain-Driven Design Tackling Complexity in the Heart of Software.chm
2009-11-19
PowerDesigner16.1 crack keygen 破解文件
2012-06-21
High Performance MySQL Second Edition
2010-07-16
Understanding Web Services XML WSDL SOAP and UDDI.pdf
2010-04-16
Developing Enterprise Web Services An Architect's Guide.chm
2010-04-16
Packtpub.Spring.Security.3.May.2010
2012-09-10
programming web services with soap.pdf
2010-04-16
Pro Apache Log4j Second Edition
2012-09-06
Apache Solr 3.1 Cookbook
2012-04-24
Lucene in Action 2nd Edition
2012-04-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅