CMake FindOpenSSL 模块深度解析:从 find_package 到 OpenSSL::SSL 链接实战
构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载CMake 的FindOpenSSL模块用于查找系统中已安装的 OpenSSL 加密库crypto与ssl并确定其版本是 C/C 项目集成 HTTPS、TLS 与密码学能力时最常用的入口。本文基于 Modules/FindOpenSSL.cmake 及仓库内配套测试 Tests/FindOpenSSL完整讲解该模块的组件语义、导入目标、结果变量、搜索提示与平台适配细节并给出可直接复制的实战用法帮助读者彻底掌握如何在项目中可靠地发现、链接并验证 OpenSSL。一、模块概览与基本调用形式FindOpenSSL是一个标准的 CMake find 模块核心功能是在系统中定位 OpenSSL 的头文件openssl/ssl.h与库文件libssl、libcrypto解析并暴露 OpenSSL 的版本号生成一组可供target_link_libraries直接使用的导入目标Imported Targets。基本调用形式如下摘自 Modules/FindOpenSSL.cmake 文档头find_package(OpenSSL [version] [COMPONENTS components...] [...])版本要求与版本区间版本区间支持3.20find_package的版本参数除了传统的单个值如3.20中引入的用法还可以传入版本区间version range例如find_package(OpenSSL 1.1.1...3)这类语法。更详细的版本区间语义可参见find_package命令本身。OpenSSL 3.0 支持3.18自 CMake 3.18 起该模块正式支持 OpenSSL 3.0。这一版本在版本号宏格式上发生了重要变化详见下文“版本解析原理”一节模块为此实现了两套解析逻辑。组件COMPONENTS模块支持两个可选组件二者均在 CMake 3.12 中引入组件语义Crypto确保找到 OpenSSL 的crypto库SSL确保找到 OpenSSL 的ssl库组件使用标准语法指定find_package(OpenSSL [COMPONENTS components...])默认行为如果不指定任何组件模块默认将Crypto视为必需、SSL视为可选——也就是说即使找不到ssl库只要crypto库存在find_package(OpenSSL)仍然算成功。若希望把SSL也变成硬性要求必须显式写出COMPONENTS SSL。从实现上看Modules/FindOpenSSL.cmake模块会遍历OpenSSL_FIND_COMPONENTS列表对Crypto和SSL分别检查头文件与对应库是否存在从而设置OpenSSL_component_FOUND遇到未知组件则会发出WARNING并置为FALSEelse() message(WARNING ${_comp} is not a valid OpenSSL component) set(OpenSSL_${_comp}_FOUND FALSE) endif()二、导入目标Imported Targets模块在找到 OpenSSL 后提供三个导入目标Modules/FindOpenSSL.cmakeOpenSSL::Crypto3.4封装crypto库的使用要求仅在找到crypto库时可用。它同时携带INTERFACE_INCLUDE_DIRECTORIES即 OpenSSL 头文件目录因此链接该目标后无需再手动添加包含目录。目标属性在源码中以UNKNOWN IMPORTED形式创建并区分 DEBUG / RELEASE 配置Modules/FindOpenSSL.cmake。OpenSSL::SSL3.4封装ssl库的使用要求仅在找到ssl库时可用。为方便起见该目标还自动链接OpenSSL::Crypto因为ssl库本身依赖crypto库Modules/FindOpenSSL.cmakeif(TARGET OpenSSL::Crypto) set_target_properties(OpenSSL::SSL PROPERTIES INTERFACE_LINK_LIBRARIES OpenSSL::Crypto) endif()因此项目中只需链接OpenSSL::SSL一个目标crypto依赖即被自动传递。OpenSSL::applink3.18封装 OpenSSL 应用侧接口openssl/applink.c的使用要求仅在找到 OpenSSL 且版本不低于 0.9.8 时可用。该接口是 OpenSSL 的 BIO 层与 Windows 编译器运行时环境之间的“胶水层”使用 MSVC 构建时可能需要把它编入项目。关键注意事项该接口文件是通过INTERFACE_SOURCES目标属性加入的。由于 CMake 中接口源文件的传播特性官方强烈建议仅以PRIVATE作用域链接该目标确保它在整个依赖图中只被链接一次target_link_libraries(project_target PRIVATE OpenSSL::applink)使用其他作用域可能引发构建或链接阶段的意外问题因为 ISO C 与 ISO C 标准对链接行为的要求都非常宽松。在非 MSVC 平台上链接该目标不会产生任何效果。实战提示当你的 Windows MSVC 项目与 OpenSSL 使用了不同的运行时配置例如项目用/MT、OpenSSL 用/MD时把OpenSSL::applink以PRIVATE链接进可执行文件是官方推荐的兼容性解法。三、结果变量Result Variables模块查找完成后会定义以下变量Modules/FindOpenSSL.cmake变量含义OpenSSL_FOUND3.3布尔值表示是否找到所请求版本的OpenSSL 库OpenSSL_VERSION4.2找到的 OpenSSL 版本格式为major.minor.revisionpatch例如0.9.8sOPENSSL_INCLUDE_DIROpenSSL 头文件目录OPENSSL_CRYPTO_LIBRARYcrypto库文件OPENSSL_CRYPTO_LIBRARIEScrypto库及其依赖OPENSSL_SSL_LIBRARYssl库文件OPENSSL_SSL_LIBRARIESssl库及其依赖OPENSSL_LIBRARIES所有 OpenSSL 库及其依赖OPENSSL_APPLINK_SOURCEOpenSSL::applink目标中的源文件仅当 OpenSSL 版本 ≥ 0.9.8 且平台为 MSVC 时定义传统变量与新变量的演进值得注意的是OpenSSL_FOUND与OpenSSL_VERSION在文档中被同时列在“结果变量”和“弃用变量”两个小节中OpenSSL_FOUND3.3 引入4.2 起弃用建议改用同值的OpenSSL_FOUND。OPENSSL_VERSION4.2 起弃用被OpenSSL_VERSION取代。也就是说新项目应优先使用OpenSSL_FOUND与OpenSSL_VERSION无全大写前缀的版本旧的全大写形式仅为向后兼容保留。此外OPENSSL_INCLUDE_DIR与库相关变量仍保持全大写命名这与 CMake 中 find 模块“缓存变量用大写”的传统一致且OPENSSL_INCLUDE_DIR会被mark_as_advanced隐藏Modules/FindOpenSSL.cmake。四、搜索提示变量Hints模块接受以下变量来控制搜索行为Modules/FindOpenSSL.cmake变量说明OPENSSL_ROOT_DIR设为某个 OpenSSL 安装的根目录用于在自定义位置搜索库OPENSSL_USE_STATIC_LIBS3.4设为TRUE时优先选择静态 OpenSSL 库而非共享库OPENSSL_MSVC_STATIC_RT3.5设为TRUE时搜索使用 MSVC 静态运行时MT构建的 OpenSSL 库ENV{PKG_CONFIG_PATH}在类 UNIX 系统上模块使用pkg-config定位 OpenSSL可通过设置该环境变量指定备选位置适用于存在多套库安装的系统三种提示的典型用法# 指向自定义安装位置 set(OPENSSL_ROOT_DIR /opt/openssl-3.0) # 优先使用静态库便于部署单文件可执行程序 set(OPENSSL_USE_STATIC_LIBS TRUE) # MSVC 下要求链接 /MT 运行时构建的 OpenSSL set(OPENSSL_MSVC_STATIC_RT TRUE) find_package(OpenSSL REQUIRED)从实现看OPENSSL_USE_STATIC_LIBS的工作机制是临时调整CMAKE_FIND_LIBRARY_SUFFIXES在 MSVC 下把.lib .a排到搜索后缀之前其他平台则只保留.a以优先命中静态库查找结束后再恢复原始后缀顺序Modules/FindOpenSSL.cmake、Modules/FindOpenSSL.cmake。而OPENSSL_MSVC_STATIC_RT则控制 MSVC 库名中的运行时后缀是MT还是MDModules/FindOpenSSL.cmake。五、平台适配与搜索路径详解UNIX 类系统pkg-config 优先在 UNIX 上模块首先尝试find_package(PkgConfig QUIET)随后执行pkg_check_modules(_OPENSSL QUIET openssl)Modules/FindOpenSSL.cmake。pkg-config提供的信息包含目录、库目录、链接参数会被并入后续的find_path/find_library提示中。因此若系统存在多套 OpenSSL如系统自带 Homebrew/自编译可通过设置PKG_CONFIG_PATH指向目标版本对应的.pc文件目录也可直接用OPENSSL_ROOT_DIR绕过 pkg-config 的默认结果。Windows / MSVC注册表与目录命名约定在 MSVC 下模块读取卸载注册表中的“Inno Setup: App Path”条目对应 slproweb 的 Win32OpenSSL 安装包作为搜索提示并依据架构拼出默认安装目录Modules/FindOpenSSL.cmake64 位ProgramFiles/OpenSSL-Win64、C:/OpenSSL-Win64/等32 位ProgramFiles(x86)/OpenSSL、C:/OpenSSL/等ARM64Win64-ARM对应目录。更重要的是模块针对 MSVC 实现了按运行时与配置区分的库名匹配。自 OpenSSL 1.1 起Windows 库名形如libcrypto32MTd.lib、libssl32MTd.lib其中MD 动态库 release、MDd 动态库 debugMT 静态库 release、MTd 静态库 debug。模块分别用find_library查找 DEBUG 与 RELEASE 两套库名再通过SelectLibraryConfigurations合并出最终的OPENSSL_CRYPTO_LIBRARY/OPENSSL_SSL_LIBRARYModules/FindOpenSSL.cmake。库名还同时兼容旧版 OpenSSL 的libeay32/ssleay32命名以及静态构建特有的_static后缀如libcrypto_static.lib优先级高于作为 DLL 导入库的libcrypto.lib。MinGW 与通用分支MinGW搜索crypto/libeay32与ssl/ssleay32路径后缀包括lib/MinGW、lib、lib64Modules/FindOpenSSL.cmake其他平台搜索libcrypto/libeay32与libssl/ssleay32路径后缀为libModules/FindOpenSSL.cmake。特殊平台QNX模块对 QNX 7.0.x 做了专门处理该系统并行提供 OpenSSL 1.0.2头文件在usr/include/openssl库为libcrypto.so.2/libssl.so.2与 1.1.1头文件在usr/include/openssl1_1库为libcrypto1_1.so.2.1/libssl1_1.so.2.1。当请求的版本落在 1.1 区间时模块自动使用openssl1_1头文件后缀与1_1库名后缀Modules/FindOpenSSL.cmake。静态库依赖的自动补全链接静态 OpenSSL 时往往还需要zlib、线程库-pthread与dl库。模块通过_OpenSSL_test_and_find_dependencies宏分析 pkg-config 返回的依赖库列表与链接标志Modules/FindOpenSSL.cmake遇到z依赖时调用find_package(ZLIB)遇到-pthread标志时调用find_package(Threads)识别出dl依赖或 Linux 上兜底假设需要其他无法识别的静态依赖则原样透传。随后_OpenSSL_add_dependencies与_OpenSSL_target_add_dependencies把这些依赖追加到OPENSSL_*_LIBRARIES变量以及OpenSSL::Crypto/OpenSSL::SSL目标的INTERFACE_LINK_LIBRARIES中Modules/FindOpenSSL.cmake。此外Windows 静态链接时还会自动补上ws2_32与crypt32系统库Modules/FindOpenSSL.cmake。六、版本解析原理兼容两代 OpenSSL 版本宏模块通过读取头文件openssl/opensslv.h来解析版本Modules/FindOpenSSL.cmake并针对新旧两代宏做了兼容旧格式OPENSSL_VERSION_NUMBER十六进制编码为0xMNNFFPPSmajor / minor / fix / patch / status。模块用正则拆解出各字段其中 patch 字段01→a、02→b……ASCII 96 偏移换算最终拼出如0.9.8s的版本串patch 为00时无字母后缀。新格式OPENSSL_VERSION_STROpenSSL 3.0.0自 3.0 起新增的宏直接包含MAJOR.MINOR.PATCH文本模块优先通过OPENSSL_VERSION_NUMBER正则匹配若失败则回退解析OPENSSL_VERSION_STR得到如3.0.13的版本串并据此回填OPENSSL_VERSION_MAJOR/MINOR/FIX。这一设计正是模块在 3.18 版本支持 OpenSSL 3.0 的关键所在。解析结果最终通过FindPackageHandleStandardArgs的VERSION_VAR参与版本校验并支持HANDLE_VERSION_RANGE版本区间与HANDLE_COMPONENTS组件语义—— 若组件缺失或版本不满足OpenSSL_FOUND将为FALSEModules/FindOpenSSL.cmake。七、实战示例与测试验证官方示例模块文档给出了两个标准用法Modules/FindOpenSSL.cmake示例一仅链接 crypto 库find_package(OpenSSL) target_link_libraries(project_target PRIVATE OpenSSL::Crypto)示例二显式要求 ssl 库找不到即报错find_package(OpenSSL COMPONENTS SSL) target_link_libraries(project_target PRIVATE OpenSSL::SSL)更完整的工程化写法cmake_minimum_required(VERSION 3.18) project(MySecureApp CXX) find_package(OpenSSL 1.1.1 REQUIRED COMPONENTS SSL) add_executable(my_app main.cpp) target_link_libraries(my_app PRIVATE OpenSSL::SSL)这段代码做了三件事要求 OpenSSL ≥ 1.1.1显式要求ssl库连带自动传递crypto通过导入目标自动获得头文件目录与所有平台相关依赖线程、dl、Windows 系统库等。传统变量风格兼容旧项目如果不使用导入目标也可以走传统变量路径find_package(OpenSSL REQUIRED) include_directories(${OPENSSL_INCLUDE_DIR}) target_link_libraries(my_app ${OPENSSL_LIBRARIES})仓库的测试项目正好验证了这两种风格是等价的。在 Tests/FindOpenSSL/rand/CMakeLists.txt 中同一个main.cc被编译成两个可执行目标find_package(OpenSSL REQUIRED) add_executable(tstopensslrand_tgt main.cc) target_link_libraries(tstopensslrand_tgt OpenSSL::SSL) add_executable(tstopensslrand_var main.cc) target_link_libraries(tstopensslrand_var ${OPENSSL_LIBRARIES}) target_include_directories(tstopensslrand_var PRIVATE ${OPENSSL_INCLUDE_DIR})测试源码 Tests/FindOpenSSL/rand/main.cc 调用RAND_bytes()生成 1024 字节随机数并校验返回值从openssl/rand.h头文件到链接目标形成完整闭环。两个可执行文件分别验证“导入目标链接”与“传统变量链接”两条路径都能正确编译、链接并运行。测试由 Tests/FindOpenSSL/CMakeLists.txt 通过ctest --build-and-test注册为FindOpenSSL.rand测试。常见问题排查清单Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR这是模块的默认失败信息Modules/FindOpenSSL.cmake。先确认是否安装 OpenSSL 开发包如 Debian/Ubuntu 的libssl-dev或按提示设置OPENSSL_ROOT_DIR。同时存在多版本 OpenSSL用OPENSSL_ROOT_DIR或PKG_CONFIG_PATH明确指定目标版本。静态链接报未定义符号zlib/threads/dl模块会自动补全但若你的 OpenSSL 是特殊静态构建需确认 pkg-config 元数据完整必要时在find_package之前先find_package(ZLIB)/find_package(Threads)。MSVC 运行时不一致链接OpenSSL::applinkPRIVATE 作用域并视需要设置OPENSSL_MSVC_STATIC_RT以匹配/MT构建。版本校验失败检查OpenSSL_VERSION是否满足find_package的版本/区间要求OpenSSL 3.x 与 1.x 的解析路径不同但最终版本号均可用于比较。八、小结FindOpenSSL模块在 Modules/FindOpenSSL.cmake 中实现了从搜索、版本解析到导入目标构建的完整闭环并通过 Tests/FindOpenSSL 中的RAND_bytes用例验证了两种链接方式。核心要点可归纳为优先使用导入目标OpenSSL::SSL自动带出OpenSSL::Crypto与OpenSSL::Crypto头文件目录、依赖库均自动传播组件语义默认Crypto必需、SSL可选显式COMPONENTS SSL可强制要求 ssl 库搜索控制OPENSSL_ROOT_DIR、OPENSSL_USE_STATIC_LIBS、OPENSSL_MSVC_STATIC_RT、PKG_CONFIG_PATH四个入口覆盖了绝大多数自定义安装场景平台差异UNIX 走 pkg-configMSVC 走注册表 命名约定MinGW/QNX 各有专属路径版本解析同时兼容 OpenSSL 1.x 的OPENSSL_VERSION_NUMBER与 3.x 的OPENSSL_VERSION_STR。无论你是要在一个新项目中快速接入 TLS 能力还是要排查既有构建中 OpenSSL 链接失败的疑难问题掌握本模块的目标、变量与搜索逻辑都能让配置过程更加可控和可预期。赞分享构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载相关推荐CMake FindBLAS 模块深度解析从 find_package(BLAS) 到 BLAS::BLAS 目标CMake FindBLAS 模块深度解析从 find_package BLAS 到 BLAS::BLAS 目标 本篇技术指南围绕 CMake 官方仓库本仓构建工具开发工具CLICMake FindCups 模块深度解析用 find_package 定位并链接 Common UNIX Printing System (CUPS)CMake FindCups 模块深度解析用 find_package 定位并链接 Common UNIX Printing System CUPS 本篇技术构建工具开发工具CLICMake FindJPEG 模块深度指南从 find_package 到 JPEG::JPEG 导入目标的完整实战CMake FindJPEG 模块深度指南从 find_package 到 JPEG::JPEG 导入目标的完整实战 导读 FindJPEG 是 CMake构建工具开发工具CLI上一篇DLSS Swapper让游戏画质与帧率双赢的开源神器下一篇Neko 中 Chromium 系浏览器出现只有光标的黑屏如何排查创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

工业串口服务器选型与验证指南:从RS485到Modbus TCP的实用避坑手册

工业串口服务器选型与验证指南:从RS485到Modbus TCP的实用避坑手册

开头干工控这一行,谁没被“通讯不上”折磨过?PLC连不上仪表、上位机读不到数据、现场调试三小时结果发现是串口服务器参数配错——这些都是我亲眼见过、亲手踩过的坑。工业串口服务器这个看似不起眼的小盒子,其实是整个工业物联网里最容易被低…

2026/10/9 1:46:11 阅读更多 →
Superpowers技能系统:让Claude Code告别随机输出,稳定AI编程流程

Superpowers技能系统:让Claude Code告别随机输出,稳定AI编程流程

1. Superpowers 是什么:不是提示词合集,而是一套技能系统如果你已经用 Claude Code 写过一阵子代码,应该会发现一个很微妙的现象:同一个需求,上午问它,它给出一套非常规范的步骤,先梳理需求、再…

2026/10/9 1:45:11 阅读更多 →
OWASP MASTG 指南:检测 iOS 应用中已弃用 UIWebView(MASTG-TEST-0331)

OWASP MASTG 指南:检测 iOS 应用中已弃用 UIWebView(MASTG-TEST-0331)

文档教程网络安全 【免费下载链接】mastg The OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security W…

2026/10/9 1:45:11 阅读更多 →

最新新闻

Rust实现COM DLL完整指南:FaceWinUnlock-Tauri中DllGetClassObject与引用计数管理原理

Rust实现COM DLL完整指南:FaceWinUnlock-Tauri中DllGetClassObject与引用计数管理原理

Rust实现COM DLL完整指南:FaceWinUnlock-Tauri中DllGetClassObject与引用计数管理原理 【免费下载链接】FaceWinUnlock-Tauri 一款基于 Tauri 框架开发的现代化 Windows 面容识别解锁增强软件。它通过自定义 Credential Provider (DLL) 注入 Windows 登录界面&#…

2026/10/9 3:06:55 阅读更多 →
instagrapi 登录挑战自动化解密指南:challenge_code_handler 与 change_password_handler 的完整实战

instagrapi 登录挑战自动化解密指南:challenge_code_handler 与 change_password_handler 的完整实战

网页爬虫 【免费下载链接】instagrapi 🔥 The fastest and powerful Python library for Instagram Private API 2026 with HikerAPI SaaS 项目地址: https://gitcode.com/gh_mirrors/in/instagrapi 点击查看 免费下载 导读 instagrapi 是 Python 生态…

2026/10/9 3:06:54 阅读更多 →
微信聊天记录如何搬到外置盘?AppPorts APFS挂载迁移完整教程

微信聊天记录如何搬到外置盘?AppPorts APFS挂载迁移完整教程

微信聊天记录如何搬到外置盘?AppPorts APFS挂载迁移完整教程 【免费下载链接】AppPorts 📦 A macOS utility to seamlessly migrate applications to external storage and reclaim local disk space.【一款 macOS 工具,无缝迁移应用到外部存…

2026/10/9 3:06:54 阅读更多 →
LetRecovery 在线下载功能实战:Aria2 多线程加速,一键获取微软官方系统镜像

LetRecovery 在线下载功能实战:Aria2 多线程加速,一键获取微软官方系统镜像

LetRecovery 在线下载功能实战:Aria2 多线程加速,一键获取微软官方系统镜像 【免费下载链接】LetRecovery 一款免费开源的 Windows 系统重装工具 项目地址: https://gitcode.com/gh_mirrors/le/LetRecovery 📌 为什么你需要一个靠谱的…

2026/10/9 3:06:54 阅读更多 →
5个真正靠谱的XML格式化工具推荐与工程化实践

5个真正靠谱的XML格式化工具推荐与工程化实践

1. 为什么XML格式化这件事&#xff0c;90%的开发者还在用“复制粘贴空格对齐”硬扛你有没有过这样的时刻&#xff1a;凌晨两点&#xff0c;调试一个接口返回的XML数据&#xff0c;肉眼在密密麻麻的<tag>和</tag>之间反复横跳&#xff0c;就为了确认某个<status&…

2026/10/9 3:06:54 阅读更多 →
单片机固件提取与逆向分析:从调试接口到侧信道攻击的工程实践

单片机固件提取与逆向分析:从调试接口到侧信道攻击的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 3:05:54 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题&#xff0c;隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题&#xff0c;排查到最后发现是ZonedDateTime序列化后时区丢了&#xff0c;用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问&#xff1a;办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好&#xff0c;问题是工作场景经常要在几处环境之间来回切换&#xff0c;每次都先登录跳板机再层层代理&#xff0c;实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及&#xff0c;但真正动手搭过一套能跑起来的 Agent 系统的人都知道&#xff0c;从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地&#xff0c;从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →