avatar
Articles
140
Tags
0
Categories
18
首页
归档
标签
分类
友链
李瑞琦的博客
首页
归档
标签
分类
友链

李瑞琦的博客

04 install的用法
Created2025-06-04|02-开发工具CMake
install的用法参考链接: 【CMake】cmake的install指令_cmake –install-CSDN博客 作用作用:就是把编译生成的可执行文件、静态库、动态库、头文件等拷贝到指定文件夹(${CMAKE_INSTALL_PREFIX})中 目的: 使用第三方库时,简化目录结构,install之后就可删掉源码了 自己的代码不想让别人看到源码,就把可执行文件、库、头文件install就行了 如何install1.首先得在CMakeLists中指定install的目标路径(通过${CMKAE_INSTALL_PREFIX}变量) 对于该变量的设置有多种方式: 在CMakeLists.txt中,通过set()设置 命令行中,cmake -DCMKAE_INSTALL_PREFIX=设置 2.在CMakeLists.txt中指定install规则 举个例子: 123456install(TARGETS lib_sensor lib_common lib_base my_executable ARCHIVE...
06 vcpkg用法
Created2025-06-04|02-开发工具CMake
vcpkg用法 众所周知CMAKE只有项目构建的功能,而没有包管理的功能,因此之前要用第三方库的话,基本每次都得去github上下载,然后再写CMakeLists.txt,这属实有点麻烦…因此有必要学一下包管理工具,使得在开发时,可以更简单的在项目中加入第三方的依赖 注意:vcpkg下载的都是源码然后自行编译,不是直接下载.lib,.dll文件的!!!所以他能管理的都是那些git上的开源代码库,比如:opencv、qt、ffmpeg…而像TensorRT这样的库是不能用vcpkg来安装的,还是得自行下载安装 1.使用基本流程使用vcpkg的流程很固定,基本都一样: 1.下载并编译需要的库 1vcpkg install xxx # 会安装在vcpkg/installed目录下 2.在项目的CMakeLists.txt中加入vcpkg的TOOL Chain 1234cmake_minimum_required(VERSION 3.15)# 必须在创建工程前指定CMAKE_TOOLCHAIN_FILEset(CMAKE_TOOLCHAIN_FILE...
07 protobuf插件
Created2025-06-04|02-开发工具CMake
protobuf插件 在使用protobuf这个序列化库的时候,我们通常需要手动调用protoc.exe这个可执行程序对我们定义的.proto文件进行编译,从而生成对应的.cc和.h文件,但是这有点麻烦,所以CMake提供了一个API便于我们编译.proto文件 1.编译原生proto文件123456789101112find_package(Protobuf REQUIRED)include_directories(${Protobuf_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR})set(PROTO_FILE helloworld.proto) protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILE} LANGUAGE cpp)add_executable(greeter_server greeter_server.cpp...
Makefile
Created2025-06-04|02-开发工具
Makefile总览定义:Makefile是一个自动化编译工具,用于定义文件依赖关系与构建规则 Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释 显示规则显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出:要生成的目标,目标的依赖文件,生成的命令。其格式如下: 12目标: 依赖文件 命令 # 必须用Tab缩进 make 会检查目标文件的时间戳,若依赖文件比目标新,则重新执行命令 若目标文件已存在且依赖无变化,跳过构建(增量编译) 1.伪目标:用于执行非文件生成的操作(如清理、安装等),需通过 .PHONY 显式声明 12345.PHONY: clean installclean: rm -f *.o appinstall: cp app /usr/local/bin/ 2.默认目标:一个Makefile中可以定义多个目标,当我们使用make命令但不指定具体的目标时,默认生成第一个目标 3.中间文件目标:临时生成的文件(如 .o 文件),可通过 .INTERMEDIATE...
gdb
Created2025-06-04|02-开发工具
gdbgdb是gcc工具链中的调试器,本身是个命令行的可执行程序,以往我们用vscode、Qt Creator调试程序的时候,底层用的都是gdb工具,不过这些IDE把他的数据给可视化了 1.gdb中常见指令启动与连接 命令 说明 gdb <executable> 启动GDB并加载可执行文件 gdb -p <pid> 附加到正在运行的进程 target remote :<port> 连接远程gdbserver(常用于嵌入式调试) target remote /dev/ttyUSB0 通过串口连接目标板(如ARM开发板) 断点与观察点 命令 说明 break <function> 在函数入口设断点(如 break main) break *<address> 在内存地址设断点(如 break *0x8000) break <file:line> 在指定文件的某一行设断点(如 break driver.c:42) watch...
docker
Created2025-06-04|02-开发工具
Docker常用CLI指令镜像相关 docker pull:下载一个镜像 docker build -t :编译一个镜像 docker imags:查看所有已有镜像 docker image rm :删除一个镜像 容器相关 docker run:创建并运行一个容器,处于运行状态,它包含以下常见指令: 基础参数: -d:后台运行容器 -it:交互终端运行 –name:指定容器名称 –rm:容器退出后自动删除 -w:设置工作目录 资源限制 网络配置: -p:端口映射 –net:网络模式 环境变量: -e / –env: 设置环境变量 用户: -u:指定用户 docker pause:让一个运行的容器暂停 docker unpause:让一个容器从暂停状态恢复运行 docker stop:停止一个运行的容器 docker start:让一个停止的容器再次运行 docker rm:删除一个容器 docker ps:查看当前正在运行的容器 docker ps -a:查看所有容器(包含已经停止了的) docker...
git
Created2025-06-04|02-开发工具
git使用笔记1.用户初始化12git config --global user.name "Li-Ruiqi"git config --global user.email "1009962019@qq.com" 提交代码时会显示这里配置的user的信息 不加--global也行,就是配置当前仓库 2.提交一个PR12345git checkout -b feature/xxx # 创建新分支并切换# 进行代码修改git add.git commit -m "提交信息"git push origin feature/xxx 3.切换到某个提交(commit) 如果check out到当前最新节点之前的某个节点,修改代码并提交,再切换回最新节点,会发现刚才的commit消失了,并没在该分支中 12345678910# 列出提交历史来找git graph中消失的commitgit log# 或者git reflog#切换git checkout...
01 CMake的基本用法
Created2025-06-04|02-开发工具CMake
CMake基本用法1.CmakeListsCmakeLists.txt是 cmake 的构建定义文件,如果工程存在多个目录,需要确保每个要管理的目录都存在一个CMakeLists.txt 2.CMake的语法 现代CMake和之前CMake的区别: 现代CMake是面向Tartget的,什么添加头文件、库的路径都是针对某个Target添加而不是对整个目录都添加进去。 cmake_minimum_required() 添加CMake编译的最低版本 project() 命名该CMake工程 add_executable(<name> [source1] [source2 ...]) 指定该工程编译将生成.exe的可执行文件 add_library(<name> [STATIC|SHARED|MODULE] [source1] [source2 ...]) 指定该工程编译生成静态/动态库 aux_source_directory(dir...
信号
Created2025-06-04|01-计算机基础八股
信号1.基本概念信号是事件发生时对进程的通知机制,也可以把它称为软件中断。信号与硬件中断的相似之处在于能够打断程序当前执行的正常流程, 其实是在软件层次上对中断机制的一种模拟。 大多数情况下,是无法预测信号达到的准确时间,所以,信号提供了一种处理异步事件的方法 1.1信号的用途一个有“一定权限”的进程(比如内核)可以给另一个进程发送信号,所以信号是一种进程间通信的机制。当某个事件发生时,一个进程通知另一个进程。 1.2信号的使用案例 Linux在终端中输入 Ctrl + Z可以使内核发送**暂停信号 **(SIGCONT )以暂停前台的进程 Linux在终端中输入 Ctrl + C可以使内核发送中断信号(SIGINT )以结束前台的进程 用户可以通过 kill() 系统调用将任意信号发送给其它进程。当然对此是有所限制的,接收信号的进程和发送信号的进程的所有者必须相同,亦或者发送信号的进程的所有者是 root 用户 ...
多线程编程
Created2025-06-04|01-计算机基础八股
...
1…121314
avatar
Li Ruiqi
总有低谷
Articles
140
Tags
0
Categories
18
Follow Me
Categories
  • 01-计算机基础八股12
  • 02-开发工具11
    • CMake7
  • 03-C++15
  • 04-Linux39
    • 01-Linux基本操作6
    • 02-系统移植7
    • 03-内核开发19
    • 04-应用开发7
  • 05-MCU28
    • 01-FreeRTOS6
    • 02-STM329
    • 03-MSP4304
    • 04-LVGL4
  • 06-嵌入式硬件5
  • 07-RISC-V3
  • 08-Qt20
  • 09-ROS7
Website Info
Article Count :
140
Unique Visitors :
Page Views :
Last Update :
©2019 - 2025 By Li Ruiqi
Framework Hexo|Theme Butterfly
人因梦想而伟大