当前位置: 首页 > news >正文

cmakelist文件中常见语句的含义

最近在进行c++代码的编译,发现cmakelist文件中有很多语句。一开始小白并不理解什么含义,学习后特此记录,以方便以后自己查阅。

情况一:单个模块,无主模块包含多个子模块的情况

文件目录如下:

MyProject/
├── CMakeLists.txt
├── include/
│   └── my_library.h
├── src/
│   ├── main.cpp
│   └── my_library.cpp
└── bin/

指定最低 CMake 版本

cmake_minimum_required(VERSION 3.10)

模块名称

project(MyProject)

设置头文件目录

 

target_include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

将当前源代码目录下的 include 文件夹添加到头文件搜索路径中,编译时可以正确找到 my_library.h

添加目标(可执行文件或库)

add_executable(my_executable main.cpp)

(生成一个名为 my_executable 的可执行文件,源文件为 main.cpp)

add_library(my_library STATIC my_library.cpp)

(创建一个名为 my_library 的静态库,源文件为 my_library.cpp)

路径说明

(可选)

set(OpenCV_DIR "/usr/local/include/opencv4/")

OpenCV_DIR:这是一个变量名,通常用于指定 OpenCV 的安装路径。

"/usr/local/include/opencv4/":这是变量的值,表示 OpenCV 的头文件路径。

查找库

(可选)

find_package(OpenCV REQUIRED)

OpenCV:这是需要查找的库的名称。

REQUIRED:表示如果找不到 OpenCV,CMake 会报错并停止配置过程。

说明:

OpenCV 的库文件(如 .so 或 .a 文件)通常安装在 /usr/local/lib/ 目录下,而不是头文件路径 /usr/local/include/opencv4/

 

当使用 find_package(OpenCV REQUIRED) 命令时,CMake 会根据 OpenCV_DIR 提供的路径来查找 OpenCV 的头文件。同时,它会自动在标准路径(如 /usr/local/lib/)中查找 OpenCV 的库文件。

 

虽然 OpenCV_DIR 指向的是头文件路径,但 find_package() 会根据这个路径推断出库文件的可能位置(通常是 /usr/local/lib/)。如果在这个位置没有找到库文件,find_package() 会继续在其他标准路径中查找,以确保能够正确找到 OpenCV 的头文件和库文件)

 

找到后会自动配置变量:

OpenCV_INCLUDE_DIRS:包含OpenCV头文件的路径。

OpenCV_LIBRARIES:包含OpenCV库文件的路径

获取到的OpenCV_INCLUDE_DIRS、OpenCV_LIBRARIES路径可以在当前目录和子目录中使用。

然后就可以继续配置opencv的头文件和库文件了

target_include_directories(${OpenCV_INCLUDE_DIRS})

target_link_libraries(my_executable ${OpenCV_LIBRARIES})

 链接库

 

target_link_libraries(my_executable my_library)

my_library 链接到 my_executable。这样 my_executable 在运行时可以使用 my_library 中定义的函数。

设置输出目录

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

将可执行文件的输出目录设置为 bin/,可在该目录下找到可执行文件

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

将库文件的输出目录也设置为 bin/,可在该目录下找到动态/静态链接库

情况二:多个模块,主模块包含多个子模块的情况

文件目录如下:

MyMainProject/
├── CMakeLists.txt                # 主模块的 CMakeLists.txt
├── main.cpp                      # 主模块的源文件
├── subproject1/
│   ├── CMakeLists.txt            # 子模块1的 CMakeLists.txt
│   ├── src/
│   │   └── subproject1.cpp       # 子模块1的源文件
│   └── include/
│       └── subproject1.h         # 子模块1的头文件
├── subproject2/
│   ├── CMakeLists.txt            # 子模块2的 CMakeLists.txt
│   ├── src/
│   │   └── subproject2.cpp       # 子模块2的源文件
│   └── include/
│       └── subproject2.h         # 子模块2的头文件

现在的cmakelist文件分为两种,一种是主模块的cmakelist文件,一种是子模块的cmakelist文件。

先说主模块的cmakelist(主要把各个子模块链接起来)

指定最低 CMake 版本

cmake_minimum_required(VERSION 3.10)

主项目名称

project(MyMainProject)

添加子项目

add_subdirectory(subproject1)

add_subdirectory(subproject2)

将子项目 subproject1 和 subproject2 纳入主项目的构建体系中。CMake 会递归解析这些目录下的 CMakeLists.txt 文件。

 

 

注意:可能也会存在以下写法

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/ 3rdparty.out)

3rdparty 子目录纳入构建体系,输出目录为 3rdparty.out。

3rdparty.out 是相对于当前构建目录(build)的输出目录。

在构建过程中,3rdparty 子项目的输出将被放置在这些目录中。

 

定义主项目的可执行文件

add_executable(main_app src/main.cpp)

定义主项目的可执行文件 main_app,源文件为 src/main.cpp

链接子项目生成的库

 

target_link_libraries(main_app subproject1_lib subproject2_lib)

将子项目生成的库 subproject1_lib 和 subproject2_lib 链接到主项目的可执行文件 main_app

链接子项目的头文件

 

target_include_directories(main PUBLIC

${CMAKE_SOURCE_DIR}/subproject1/include

${CMAKE_SOURCE_DIR}/subproject2/include)

把这两个 include/ 目录挂到可执行文件上

设置输出目录

 

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

将可执行文件的输出目录设置为 bin/

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

库文件的输出目录设置为 bin/


如果不在主模块中target_include_directories(引入头文件搜索路径),那么必须在子模块中定义好此部分,以subproject2为例。

target_include_directories(subproject2 PUBLIC subproject2/include)

因为PUBLIC 关键字把 头文件搜索路径 登记到了这两个 库目标 的 INTERFACE_INCLUDE_DIRECTORIES 属性上。CMake 就会自动把这两条 INTERFACE 路径 追加 到 main 的编译 flags 里,无需再写一次 target_include_directories。

谨记:

如果只写 target_include_directories,编译能通过,链接会报 undefined reference;
如果只写 target_link_libraries,链接能找到库,但编译会报 找不到头文件;
因此 两个命令都必须出现,只是它们不一定都由“你”亲自写——现代 CMake 的传递性(PUBLIC)可以帮你省掉其中一段,但底层信息仍然缺一不可。

再说子模块的cmakelist(指定源文件,并管理自己“一亩三分地”的内部依赖)

子项目名称

project(Subproject1)

设置子项目头文件目录

target_include_directories(subproject1  PUBLIC  subproject1/include)

定义子项目的目标,生成一个静态链接库

add_library(subproject1_lib STATIC  subproject1/src/subproject1.cpp)

子项目的cmakelist向主项目cmakelist传递路径(可选)

set(JPEG_PATH ${CMAKE_CURRENT_SOURCE_DIR}/jpeg_turbo)

设置JPEG_PATH为子项目目录下的jpeg_turbo文件夹路径

 

set(LIBJPEG ${JPEG_PATH}/Linux/${TARGET_LIB_ARCH}/libturbojpeg.a PARENT_SCOPE)

使用PARENT_SCOPE将LIBJPEG(链接库)传递到上一级的CMakeLists.txt 文件中。

 

set(LIBJPEG_INCLUDES ${JPEG_PATH}/include PARENT_SCOPE)

使用PARENT_SCOPE将LIBJPEG_INCLUDES(头文件)传递到上一级的CMakeLists.txt 文件中。

 

如果在 3rd 文件夹下的 CMakeLists.txt 文件中设置了变量 LIBJPEG_INCLUDES 并使用了 PARENT_SCOPE,那么在与 3rd 同级的 cpp 文件夹下的 CMakeLists.txt 文件中也可以直接使用这个变量。

向生成的静态库添加头文件(比较绕)

set(SOURCES

    rknpu1/yolov8_seg.cc

    rknpu1/postprocess.cc

    ../utils/image_utils.c

    ../utils/file_utils.c

    ../utils/image_drawing.c

)

定义了一个变量 SOURCES,它包含了一系列源文件的路径。

 

 

add_library(yolov8_seg STATIC ${SOURCES})

作用是生成一个名为 yolov8_seg 的静态库,这个静态库包含了变量 SOURCES 中列出的所有源文件。

 

关于include_directories和target_include_directories的区别(link_libraries与target_link_libraries也同理)

捕获

关于target_include_directories、target_link_directories、target_link_libraries的区别,什么情况下使用

  •  #include 不到? -> 用 target_include_directories(告诉编译器去哪裡找头文件)
  • 函数找不到定义(链接错误)? -> 用 target_link_libraries(告诉链接器需要链接哪个库)
  • 尽量别用 target_link_directories(告诉链接器去哪裡找库文件)
 最后关于Cross.cmake的内容(交叉编译时可能会用到)

指定C编译器的路径。

指定C++编译器的路径。

set(CMAKE_C_COMPILER "arm-linux-gnueabihf-gcc")

set(CMAKE_CXX_COMPILER "arm-linux-gnueabihf-g++")

设置交叉编译的目标文件的根目录

(当前为/mnt)

set(CMAKE_SYSROOT $ENV{SYSROOT})

设置查找头文件、库文件和可执行文件的根路径(当前为/mnt)

set(CMAKE_FIND_ROOT_PATH $ENV{SYSROOT})

 

CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:设置为NEVER,表示CMake不会在 CMAKE_FIND_ROOT_PATH 中查找可执行文件。

 

CMAKE_FIND_ROOT_PATH_MODE_PACKAGE:设置为 ONLY,表示 CMake 只在 CMAKE_FIND_ROOT_PATH 中查找包(如通过 find_package() 查找的库)。

 

CMAKE_FIND_ROOT_PATH_MODE_LIBRARY:设置为 ONLY,表示 CMake 只在 CMAKE_FIND_ROOT_PATH 中查找库文件。

 

CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:设置为 ONLY,表示 CMake 只在 CMAKE_FIND_ROOT_PATH 中查找头文件。

 

 

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

 

相关文章:

cmakelist文件中常见语句的含义

最近在进行c++代码的编译,发现cmakelist文件中有很多语句。一开始小白并不理解什么含义,学习后特此记录,以方便以后自己查阅。 情况一:单个模块,无主模块包含多个子模块的情况 文件目录如下:MyProject/ ├── CMakeLists.txt ├── include/ │ └── my_library.h …...

charles破解-在线生成激活码

charles破解下载最新Charles,官网地址:Charles官网下载安装后,使用破解工具自动生成激活码Charles激活码自动生成工具具体用法如下:打开激活工具,输入RegisterName名称,名称可任意输入,点击生成即可自动生成激活码打开Charles,点击help,选择Register Charles,输入生成…...

微信个人号开发

微信个人号二次开发,是完整的第三方服务平台,并基于IPAD协议8.0.57开发出的最新个微API服务框架。 你可以 通过API 实现 个性化微信功能 (例云发单助手、社群小助手、客服系统、机器人等),用来自动管理微信消息。用户仅可一次对接,完善所有功能。可实现分布式部署,批量管…...

内部排序-直接插入排序冒泡排序快速排序对比

内部排序-直接插入排序冒泡排序快速排序对比内部排序-内部排序-直接插入排序冒泡排序快速排序对比 写在前面:参考《数据结构(C语言版)》严蔚敏 吴伟民 编著 清华大学出版社 2008年10月第27次印刷 📋 算法概述 直接插入排序(Straight Insertion Sort)是一种最简单的排…...

STM32读写EEPROM

代码如下#include "i2c.h" #include <string.h>/* M24C64设备地址(A0/A1/A2接地,7位地址为0x50,左移1位后为0xA0) */ #define EEPROM_ADDR (0x50 << 1) #define M24C64_PAGE_SIZE 32 // 页面大小:32字节 #define M24C64_WR…...

OpenStack Nova 创建虚拟机

创建虚拟机的过程是一个经典的分布式、异步、状态驱动的工作流。其核心设计哲学是:API 接收请求 -> 调度决策 -> 资源分配 -> 虚拟化层执行。整个过程涉及多个 Nova 服务以及外部组件(Glance, Neutron, Cinder, Keystone)。 1、基本流程 sequenceDiagramparticipan…...

AI革命2025:新一代人力资源管理系统十大标杆产品评测

导读:在数字化浪潮推动下,AI与移动技术正在重塑人力资源管理系统的行业格局。本文盘点了2025年中国市场十款主流智能人力资源管理系统,涵盖集团型、成长型及中小企业的核心需求。重点介绍红海eHR在AI智能体、移动端全流程和数据驱动决策上的创新优势,并通过多维度评分与场景…...

企业HR系统选型全指南:百人初创到万人集团的数字化方案与实施路径

导读:本篇文章围绕企业不同规模的人力资源管理需求,梳理了从百人初创到万人集团的HR系统选型逻辑。通过分层痛点分析、科学评估体系、信息密集对比表和真实案例,并系统推荐了包括i人事、北森、红海云在内的多款市场热门产品,助力企业高效推进HR数字化转型。本文属于深度内容…...

C++ auto关键字

C++ auto关键字的原理与使用auto关键字: 一、C++98标准auto关键字的作用和C语言的相同,表示自动变量,是关于变量存储位置的类型饰词,通常不写,因为局部变量的默认存储就是auto 1 void foo(void) 2 { 3 int a; //变量存储在栈区 4 auto int b; //…...

API 响应体加密场景下的调试实践:Postman 的局限与 Apipost 的优化

在日常开发和测试过程中,我们经常会遇到如下场景: 后端服务出于安全性或协议规范的考虑,对 API 的响应体进行了加密或编码处理,例如 Base64 编码、AES/RSA 加密等。这样做在生产环境中是合理且必要的,能够避免敏感数据被明文传输。但与此同时,也为开发和测试阶段的调试带…...

ARM主板:低功耗高性能的嵌入式计算核心

在当今数字化飞速发展的时代,计算机硬件领域不断创新变革,其中ARM主板凭借其独特的优势脱颖而出,成为众多应用场景的理想选择。无论是智能家居、工业自动化还是物联网设备等,都能看到它活跃的身影。下面将深入探讨ARM主板的相关特性、优势以及广泛的应用场景。 什么是ARM主…...

2025绩效管理必知

HR 往往是一个企业绩效管理的推动者,但是在推动的背后,实际有一个非常重要的目标,那就是提高个人和团队的绩效,从而提升企业整体的绩效。绩效管理就是要找到 “应该实现什么 “和 “如何实现 “这些问题的答案。它是关于寻找更有效的方法来提高业务绩效。 绩效管理关注什么…...

【刷题笔记】cf808f

CF803F 场上死磕无法战胜,原来是个绿题吗哈哈。 考虑到跟序列的顺序无关,直接在值域上做。我们设 \(f_i\) 表示 \(\gcd = i\) 的方案数。那么有 \[f_i = 2^{g_i} - 1 - \sum_{i | d \land i \ne d} f_d \]\(g_i\) 是原序列中是 \(i\) 倍数的个数。那么调和级数 \(O(V\log V)\…...

Laravel APP_DEBUG=true:存在账户信息泄露风险

Laravel APP_DEBUG=true:存在账户信息泄露风险 在 Laravel 开发过程中,APP_DEBUG=true 是一个高频使用的配置 —— 它能在代码报错时显示详细的堆栈跟踪、变量值和配置信息,极大提升调试效率。但鲜少有人意识到,若将开启调试模式的项目部署到生产环境,会直接沦为账户信息泄…...

将当前目录下的所有文件 / 目录完整复制到/tmp目录,且会保留文件的权限、所有者、时间戳等属性

tar cvf - * | (cd /tmp && tar xvfp -)...

C# 操作 DXF 文件指南

C# 操作 DXF 文件主要借助一些专业的库来解析其结构并处理其中的图形数据。 C# 操作 DXF 文件指南 摘要 通过 C# 操作 AutoCAD 导出的 DXF 文件,你可以实现图纸的读取、编辑、创建和转换。本指南将介绍两个主流的开源库 netDxf 和 DXF.NET (IxMilia.Dxf),并提供核心代码示例、…...

在Proxmox中部署Security Onion的安全配置实战

本文详细记录了在Proxmox虚拟化环境中部署Security Onion网络监控系统的完整过程,重点解决了官方文档未涉及的网桥配置问题,包括创建无IP嗅探接口、Linux网桥设置及虚拟机网络设备配置等关键技术环节。在Proxmox中部署Security Onion的安全配置实战 文档说明 Security Onion项…...

报表到 BI:企业数据从展示到决策的进阶之路

报表与BI分析:从数据展示到决策洞察的进化之路 企业数字化转型的浪潮里,“数据驱动决策” 早成共识,可不少企业仍在 “报表” 与 “BI 分析” 的迷雾里打转:是替代,还是互补?为何满墙报表难寻洞察?为何 BI 工具常被业务部门当作 “数据探索的钥匙”?本文从本质差异、能…...

抢先体验智能测试时代,QA必备AI测试工具

敏捷开发模式下的测试挑战 敏捷开发模式下,业务快速迭代,给测试团队带来了前所未有的压力。每一次功能升级或系统迁移,都意味着从功能测试、兼容性测试、性能测试到安全性的大规模回归验证。测试规模成倍增长,而团队人力却往往难以及时扩充。 再加上多设备、多系统环境下频…...

Flink 与Flink可视化平台StreamPark教程(DataStreamApi基本使用)

本文分享自天翼云开发者社区《Flink 与Flink可视化平台StreamPark教程(DataStreamApi基本使用)》,作者:l****n DataStreamApidataStreamApi是一切的基础,处于调度flink程序处理任务的起点。Flink 有非常灵活的分层 API 设计,其中的核心层就是 DataStream/DataSet API。由…...

内部排序-直接插入排序

内部排序-直接插入排序内部排序-直接插入排序 写在前面:参考《数据结构(C语言版)》严蔚敏 吴伟民 编著 清华大学出版社 2008年10月第27次印刷 📋 算法概述 直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排号序的…...

玩转n8n测试自动化:核心节点详解与测试实战指南

掌握节点,掌握自动化测试的核心 在n8n中,节点(Node)是构建自动化工作流的基础单元。每一个节点都代表一个特定的操作或功能,通过将不同的节点连接起来,我们就能创造出强大的测试自动化流程。本章将深入讲解测试工程师必须掌握的几类核心节点,并通过实际测试场景展示如何…...

Linux:龙晰系统(Anolis)更新yum(dnf)仓库源

一、备份现有仓库源 1. 查看当前系统版本 cat /etc/os-release2. 备份现有仓库源 # 一共两个文件,都需要备份下:AnolisOS-BaseOS.repo AnolisOS-AppStream.repo cp /etc/yum.repos.d/AnolisOS-BaseOS.repo /etc/yum.repos.d/AnolisOS-BaseOS.repo.bak cp /etc/yum.repos.d/…...

(笔记)多项式基础 FFT

多项式 \[F(x)=\sum_{i=0}^{i-1}a_ix^i \]对多项式进行乘法,就是对两个多项式进行加法卷积。其中卷积结果 \(C(k)=\sum_{i=0}^kA(i)B(k-i)\)。 分治乘法 将 \(A(x)\) 左右拆半,不足则末尾(最高位)补上 \(0\),令 \(n=2^k\)。则 \[A(x)=A_0(x)+x^{n/2}A_1(x) \]\[A_0(x)=\su…...

MAC tomcat启动报错

MAC tomcat启动报错 org/apache/catalina/startup/Bootstrap has been compiled by a more recent前言 配置好tomcat启动报错 已连接到地址为 127.0.0.1:50303,传输: 套接字 的目标虚拟机 已与地址为 127.0.0.1:50303,传输: 套接字 的目标虚拟机断开连接 Exception in thread…...

研究生-必看-倒计时3天/武汉科技大学主办/稳定EI会议/高层次教授出席报告

武汉科技大学主办/EI稳定检索/大数据与智慧医学📢大数据与智慧医学国际学术会议(BDIMed 2025) 🔍武汉科技大学主办|高层次嘉宾出席报告| IEEE出版EI/Scopus/IEEE Xplore检索|高录用、快见刊 🔍征稿范围广:数字健康技术|智能医疗与可穿戴智能|物联网与智慧健康|医学成像…...

LGP7113 [NOIP 2020] 排水系统 学习笔记

LGP7113 [NOIP 2020] 排水系统 学习笔记 Luogu Link 题意简述 给定一个 \(n\) 个点的 \(\texttt{DAG}\)。我们认为它是一个排水系统。 节点 \(u\) 有 \(d_u\) 条输出管道,污水会被平分成 \(d_u\) 份流向下家节点。特别的,\(d_u=0\) 时认为这个节点直通污水厂,是一个最终排水…...

MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... for column FieldName at row 1

问题:MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... for column FieldName at row 1 原因:在 MySQL 中遇到错误 MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... 通常是由于尝试将一个不兼容的字符编码插入到数据库中导致的。…...

Burp Suite Professional 2025.9 发布 - Web 应用安全、测试和扫描

Burp Suite Professional 2025.9 (macOS, Linux, Windows) - Web 应用安全、测试和扫描Burp Suite Professional 2025.9 (macOS, Linux, Windows) - Web 应用安全、测试和扫描 Burp Suite Professional, Test, find, and exploit vulnerabilities 请访问原文链接:https://sysi…...

SQL Server 2022 RTM 累积更新 #21 发布

SQL Server 2022 RTM 累积更新 #21 发布SQL Server 2022 RTM 累积更新 #21 发布 Microsoft SQL Server 2022 RTM GDR & CU21 (2025 年 9 月更新) relational database management system (RDBMS) & Transact-SQL (T-SQL) 请访问原文链接:https://sysin.org/blog/sql-s…...

针对WPF的功耗优化(节能编程)

一、UI渲染优化 1. 减少不必要的视觉元素<!-- 避免过度使用复杂效果 --> <Border Background="LightGray" CornerRadius="5" Margin="5" Padding="10"><!-- 使用简单样式代替复杂模板 --> </Border><!-- 而…...

Docker 清理完整指南:释放磁盘空间的最佳实践 - 详解

Docker 清理完整指南:释放磁盘空间的最佳实践 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monos…...

微算法科技(NASDAQ: MLGO)开发Rollup技术,探索区块链扩展性解决方案

随着区块链技术的广泛应用,其扩展性问题逐渐成为制约行业发展的核心瓶颈。传统区块链架构在高频交易场景下,因链上资源有限,导致交易确认时间长、手续费高昂,难以满足商业级应用需求。为解决这一痛点,微算法科技(NASDAQ: MLGO)基于状态通道技术积累,进一步研发Rollup技…...

征稿倒计时3天/武汉科技大学主办/医学人工智能/现可享优惠

📢大数据与智慧医学国际学术会议(BDIMed 2025) 📮武汉科技大学主办|高层次嘉宾出席报告| IEEE出版EI/Scopus/IEEE Xplore检索|高录用、快见刊 📆征稿范围广:数字健康技术|智能医疗与可穿戴智能|物联网与智慧健康|医学成像和信息学 等方向均可投递 🔥参会多元化:投稿…...

生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!

本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构设计与核心技术积淀。作者:执少 对,这是一篇你明知道怎么回事儿,但还是会点进来看的文章! 本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构…...

NOI linux使用教程

一、配置NOI linux环境为中文 1. 桌面右键setting 2.下拉找到地区&语言,点击Manage Installed Languages 3. 选择安装其他语言包Install / Remove Languages 4. 勾选简体中文Chinese (simplified) 5. 输入密码后确认 6. 等待安装即可 7. 安装完后,选择语言下拉选项中的中…...

springboot 文件处理框架

-------------------------------------------------------------------------------------------Apache POI 是一款常用的 Excel 处理工具,但在一些场景下,存在内存占用高、处理速度慢等问题。以下是一些比 POI 更具优势的轻量级 Excel 处理工具:EasyExcel:是阿里巴巴开源…...

Docker:龙晰系统(Anolis)更新yum源下载docker

一、配置Docker的yum库 1. 查看系统版本 # 查看系统版本 cat /etc/os-release2. 配置系统yum源 这里可以看我的另一篇文章: 3. 卸载旧版docker与podman 重点:podman与docker冲突!!龙蜥Anolis Linux默认安装Podman作为容器管理工具,这是由于Podman是Red Hat(龙蜥的开发者之…...

针对单输入单输出、多输入多输出及三阶系统带约束的模型预测控制的实现

针对单输入单输出(SISO)、多输入多输出(MIMO)及三阶系统带约束的模型预测控制(MPC)的实现 一、SISO系统MPC实现 1. 系统建模与离散化 % 传递函数定义(二阶惯性环节) s = tf(s); G = 1/(s^2 + 2*s + 1); Ts = 0.1; % 采样时间 Gd = c2d(G, Ts, zoh); % 离散化关键参数:…...

vue3中父子组件数据同步的默认方式update:xxx

update:xxx 是Vue 3中实现自定义v-model的约定。它的工作原理是: 子组件通过emit(update:propName, newValue)通知父组件需要更新某个属性父组件可以通过v-model:propName="data"或@update:propName="data = $event"来接收这个更新 父组件:<template&…...

解决 C# 当另一个read操作挂起时不能调用read方法的问题

life runs on code作者: zhaotianff转载请注明出处...

AI辅助编程_工具和方式

AI编程AI 编程 这个时代的方式定义问题、建构系统、引导协作 方式 1. Copilot 模式:你写头它写尾 2. Agent 模式:你说话,它写程序 “氛围感编程” 产品形态插件和IDE两种 模式 :问答模式(Ask)、文件编辑模式(Edit)、智能体模式(Agent) 国内百度 腾讯: https://c…...

[完结10章]Java大模型工程能力必修课,LangChain4j 入门到实践

在人工智能技术飞速发展的今天,大型语言模型(LLM)已成为推动创新的核心驱动力。对于Java开发者而言,掌握大模型工程能力不再是一种选择,而是一种必需。LangChain4j作为专为Java开发者设计的工具库,正在成为连接传统Java工程与大模型应用的重要桥梁。参考资料:/s/1kSb5z5…...

k8s源码分析——kubectl命令行交互

Cobra库 k8s各组件的cli部分都使用Cobra库实现,Cobra 中文文档 - 掘金 (juejin.cn),获取方式如下:go get -u github.com/spf13/cobra@latestcobra库中的Command结构体的字段,用于定义命令行工具的行为和选项。它们的作用如下:Use: 命令名称。Aliases: 命令的别名。Suggest…...

将 seata 2.5 发布到私服

将 seata 2.5 发布到私服1.概述 我们在使用seata 做分布式事务的时候,有时需要将 seata 发布到私服中,方便 修改和调整。 2.实现过程 2.1 在根目录下的pom.xml 中 增加发布配置 <distributionManagement><repository><id>jpaas-release</id><url&…...

一些感悟

1. 突破分型 50分 2. 驱动浪 30分 3. 驱动浪突破分型 80分 4. 驱动浪突破分型 回调61.8% 或 80% 做单 100分 其中突破分型是做单前提 重中之重!...

五款免费低代码平台深度横评:斑斑、简道云、宜搭、氚云、织信如何选?

在当今数字化转型的浪潮中,低代码开发平台以其可视化、拖拽式的开发模式,极大地降低了企业应用开发的门槛和成本,成为企业提升效率、快速响应市场变化的重要工具。对于预算有限的中小企业、初创团队或业务部门而言,免费的低代码平台是绝佳的入门选择。本文将为您客观评析五…...

ubuntu历史版本下载

https://old-releases.ubuntu.com/releases/LTS版本:...

读书笔记:数据库索引的智能优化:反向键与降序索引

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学习《Expert Oracle Database Architecture Techniques and…...

代码随想录算法训练营第十天| 232.用栈实现队列、 225. 用队列实现栈、20. 有效的括号 、1047. 删除字符串中的所有相邻重复项

232.用栈实现队列 题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/ 解题思路:用两个栈实现队列,一个入栈,把入栈里面的元素全部放入出栈 代码实现:点击查看代码def __init__(self):self.stack_in = [] #入栈,主要负责pushself.stack_o…...