avatar
Articles
127
Tags
0
Categories
17
首页
归档
友链
李瑞琦的博客
首页
归档
友链

李瑞琦的博客

04 install的用法
Updated2025-10-31|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...
05 CMake工程层次
Updated2025-10-31|02-开发工具CMake
CMake工程结构如果项目比较简单,比如只有一个CMakeLists.txt或者projet,那么就不用特别关心这个。但是如果一个大工程,有多个可执行文件,或者又有可执行文件,又有静态/动态库,则需要写多个CMakeLists.txt 多个CMakeLists如何写一般最外层的CMakeLists写: 1.设置编译后输出的位置 2.设置整个工程的C++版本 3.add_subdirectory() 什么时候写projet()一般只有最外层的CMakeLists写一下projet()。每写一个projet(),就会生成一个.sln文件。单独打开就如右图所示。左图是最外层的.sln文件 如果用VS的话,每个project就可以单独编译,但如果用的是VSCode的话,即使不写project每个subdirectory也可以单独编译,所以就没必要写了
06 vcpkg用法
Updated2025-10-31|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插件
Updated2025-10-31|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...
00 C++面经
Updated2025-10-31|03-C++
C/C++八股关键字static1.static的作用是什么 在函数体内 + 修饰局部变量:其访问权限在函数内,仅初始化一次,存储于静态存储区 在函数体外 + 修饰全局变量:将模块的全局变量限制在模块内部(仅供.c使用),不能跨文件共享 修饰函数:该函数仅可被本模块调用,不能作为接口暴露给其他模块 注意:static 与...
02 函数式编程
Updated2025-10-31|03-C++
函数式编程 函数式编程的主要思想其实就是“回调函数”,即把一个函数A当成参数传给另一个函数B,这样B的就可以根据传入形参的不同,而能够做更多的事情 实现回调函数主要可以通过以下几种方式传入可调对象作为形参: 函数指针 lambda表达式 std::function 函数对象(重载了()运算符的类) 函数指针1.定义:函数指针是指向一个函数入口地址的指针。C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数 2.语法: <返回值类型> (*<函数指针名>)(<形参列表>) ,如果形参列表为void,则说明没有参数。 (*<函数指针名>)是一个整体,括号不能省 1234//如:int (*fun)(int,int);int (*p)(); //函数指针的另一种定义方式,不过不建议使用int (*p)(int a, int b); ...
03 命名空间
Updated2025-10-31|03-C++
命名空间1.C++的作用域C++中有四种作用域,在不同的作用域中可以定义名字相同的变量,互不干扰。 命名空间作用域:就是程序员利用名字空间定义在C++程序中划分出来的一块比较大的程序区段。在该程序区段内部,可以定义变量、函数、类、typedef、#define 等,最后由{...
04 构造函数
Updated2025-10-31|03-C++
构造函数分类 C++中有一下几类构造函数 以一下这个类为例: 1234class Person{ int age; std::string name;}; 1.默认构造函数没有参数,用于创建一个具有默认值的Person对象。 1Person()=default; 2.参数化构造函数1Person(int a, std::string n) : age(a), name(n) {} 3.拷贝构造函数使用另一个对象来初始化当前对象。 1Person(const Person& other) : age(other.age), name(other.name)...
05 继承及多态
Updated2025-10-31|03-C++
06 运算符重载
Updated2025-10-31|03-C++
1234…13
avatar
Li Ruiqi
总有低谷
Articles
127
Tags
0
Categories
17
Follow Me
Categories
  • 01-计算机基础八股12
  • 02-开发工具12
    • CMake7
  • 03-C++14
  • 04-Linux52
    • 01-Linux基本操作8
    • 02-系统移植9
    • 03-内核开发24
    • 04-应用开发8
    • 05-安卓开发3
  • 05-MCU28
    • 01-FreeRTOS7
    • 02-STM329
    • 03-MSP4304
    • 04-LVGL4
  • 06-嵌入式硬件5
  • 07-RISC-V4
Website Info
Article Count :
127
Unique Visitors :
Page Views :
Last Update :
©2019 - 2025 By Li Ruiqi
Framework Hexo|Theme Butterfly
人因梦想而伟大