从零开始 CMake 学习笔记 (F)Build Type

2023-05-16

从零开始 CMake 学习笔记 (F)Build Type

开始前先默念三遍口诀:

  • Declare a target
  • Declare target’s traits
  • It’s all about targets
    本系列主要根据GitHub上的 cmake-examples 项目进行翻译总结,同时对于不清晰的概念及函数进行查阅理解记录形成。

文章目录

  • 从零开始 CMake 学习笔记 (F)Build Type
  • 1 介绍
    • 1.1 文件树
    • 1.2 文件简介
  • 2 概念解析
    • 2.1 编译类型
    • 2.2 设置当前次的编译类型
      • 2.2.1 CMake图形界面
      • 2.2.2 CMake命令行
    • 2.3 设置默认的编译类型
      • 2.3.1 set() 拓展
        • 2.3.1.1 设置普通变量
        • 2.3.1.2 设置缓存变量
        • 2.3.1.3 设置环境变量
  • 3 运行结果

1 介绍

本示例展示了如何在生成可执行二进制文件中设置编译类型,这些类型可以指定项目的优化级别以及是否在二进制文件中包含调试信息。

1.1 文件树

F-build-type $ tree
.
├── CMakeLists.txt
├── main.cpp

1.2 文件简介

  • CMakeLists.txt - 包含了你希望运行的 CMake 命令
// $ cmake --version
cmake_minimum_required(VERSION 3.5)

// 如果编译类型未指定,那么就设置默认编译类型
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  //message可用于在编译cmake时打印信息,比如我们想打印出 `PROJECT_SOURCE_DIR` 这个变量,就可以按下面这行代码
  //message("PROJECT_SOURCE_DIR value is ${PROJECT_SOURCE_DIR}")   -- 打印`PROJECT_SOURCE_DIR`变量的值
  message("Setting build type to 'RelWithDebInfo' as none was specified.")
  //给CMAKE_BUILD_TYPE变量赋值为 RelWithDebInfo ,并将这个值写入缓存,并覆盖缓存中该变量之前的值(如果有的话)。
  set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
  // 当使用cmake-gui的时候,设置编译类型的四个可选项
  set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
    "MinSizeRel" "RelWithDebInfo")
endif()

// 设置项目名称
project (build_type)

// 添加可执行文件
add_executable(cmake_examples_build_type main.cpp)
  • main.cpp - main 文件
#include <iostream>

int main(int argc, char *argv[])
{
   std::cout << "Hello Build Type!" << std::endl;
   return 0;
}

2 概念解析

2.1 编译类型

CMake具有许多内置的构建配置,可用于编译工程。 这些配置指定了代码优化的级别,以及调试信息是否包含在二进制文件中。主要有下面四种:

  • Release - 发行版。顾名思义,程序完成开发后的发布版本,对代码做了优化,速度非常快,但无法跟踪代码,不能打断点调试。可以在编译器追加后: -O3 -DNDEBUG 选择此版本。

  • Debug - 调试版。对代码不做任何优化,可以 debug 项目中的任意文件。一般速度相对会慢,而且体积更大。可以在编译器追加后: -g 选择此版本。

  • RelWithDebInfo - 非常近似与Release版本,代码也是经过优化的,同时还支持添加断点进行调试。可以在编译器追加后: -Os -DNDEBUG 选择此版本。

  • MinSizeRel - 最小体积版本。类似与Release版本,但更偏重于优化文件大小,而不是运行速度。可以在编译器追加后: -O2 -g -DNDEBUG 选择此版本。

2.2 设置当前次的编译类型

2.2.1 CMake图形界面

在这里插入图片描述

2.2.2 CMake命令行

CMake命令行中,同配置其他参数一致,使用 -D 选项

cmake .. -DCMAKE_BUILD_TYPE=Release

2.3 设置默认的编译类型

CMake提供的默认编译类型时不包含优化的。因此,如果我们想要将设置的编译类型应用于所有用户的各个子项目,那我们可以考虑直接更改默认的编译类型。你可以直接在项目顶层的 CMakeLists.txt 文件中设置如下:

if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  message("Setting build type to 'RelWithDebInfo' as none was specified.")
  //给CMAKE_BUILD_TYPE变量赋值为 RelWithDebInfo ,并将这个值写入缓存,并覆盖缓存中该变量之前的值(如果有的话)。
  set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
  #  当使用cmake-gui的时候,设置编译类型的四个可选项
  set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
    "MinSizeRel" "RelWithDebInfo")
endif()

2.3.1 set() 拓展

set() 命令可以为普通变量、缓存变量、环境变量赋值。下面分别对三种变量的设置进行说明。

2.3.1.1 设置普通变量

命令格式set(<variable> <value>... [PARENT_SCOPE])

命令含义:将变量variable设置为值<value>...,变量variable的 作用域 为调用set命令的函数或者当前目录,如果使用了PARENT_SCOPE选项,意味着该变量的作用域会传递到上一层(也就是上一层目录或者当前函数的调用者,如果是函数则传递到函数的调用者,如果是目录则传递到上一层目录),并且在当前作用域该变量不受带PARENT_SCOPE选项的set命令的影响(如果变量之前没有定义,那么在当前作用域仍然是无定义的;如果之前有定义值,那么值和之前定义的值保持一致,类似于之前target_include_directoriesINTERFACE 命令,我定义但是我不用)。

关于变量的作用域:每一个新的目录或者函数都会创建一个新的作用域,普通变量的作用域,如果不使用PARENT_SCOPE选项,只能从外层往内层传递。

案例1

最常用的用法示例如下:

cmake_minimum_required(VERSION 3.5)
project (set_test)
set (normal_var a)
message (">>> value = ${normal_var}")

输出为:

>>> value = a

案例2

设置变量为多个给定的值:

cmake_minimum_required(VERSION 3.5)
project (set_test)
set (normal_var a b c)
message (">>> value = ${normal_var}")

输出为:

>>> value = a;b;c

案例3

设置变量为空:

cmake_minimum_required(VERSION 3.5)
project (set_test)
set (normal_var a b c)
message (">>> value = ${normal_var}")
set (normal_var) # 设置变量为空
message (">>> value = ${normal_var}")

输出为:

>>> value = a;b;c
>>> value =

案例4
在函数内使用选项PARENT_SCOPE定义变量,在函数定义的文件中(非另一个函数中)使用该变量。

cmake_minimum_required(VERSION 3.5)
project (set_test)


set (normal_var_in_fn aaa PARENT_SCOPE)

message (">>> value = ${normal_var_fn}")

输出为:

# 输出
>>>  value =

原本为空,在设置的时候用了PARENT_SCOPE关键字,那么就代表,我定义但我不用。此时该变量的值依然为空,而当前函数或者库的调用者则可以使用这个变量。

案例5
在一个函数内使用选项PARENT_SCOPE定义变量,在另一个函数(调用者,示例中为test_fn_parent)内调用该函数。

cmake_minimum_required(VERSION 3.5)
project (set_test)

function (test_fn arg1)
    set (normal_var_in_fn nohello)
    set (normal_var_in_fn ${arg1} PARENT_SCOPE)
    message (">>> in function, value = ${normal_var_in_fn}")
endfunction (test_fn)

function (test_fn_parent arg1)
    test_fn (${arg1})
    message (">>> in parent function, value = ${normal_var_in_fn}")
endfunction (test_fn_parent)

test_fn_parent (hello)

输出为:

# 输出
>>> in function, value = nohello
>>> in parent function, value = hello

由结果可以看到,在定义该变量的函数中,后面一句 set (normal_var_in_fn ${arg1} PARENT_SCOPE) 紧接着打印输出,而输出的值依然为之前设置的 nohello 。而在调用这个函数的函数中,输出的值变为了 hello。 这就是 我定义但我不用

2.3.1.2 设置缓存变量

命令格式set(<variable> <value>... CACHE <type> <docstring> [FORCE])

命令含义:将缓存条目variable设置为值<value>...,除非用户进行设置或使用了选项 FORCE ,默认情况下缓存变量的值不会被覆盖。缓存变量可以通过 cmake-gui 界面的add entry按钮来增加。缓存变量的本质为可以跨层级进行传递的变量,类似于全局变量。
  缓存变量的<type>主要有以下几类:

  1. BOOL:布尔值ON/OFF。如果是 cmake-gui 的话会对此类缓存变量提供一个选择框。
  2. FILEPATH:文件路径。 如果是 cmake-gui 的话会对此类缓存变量提供一个文件选择框。
  3. PATH:目录路径。 如果是 cmake-gui 的话会对此类缓存变量提供一个目录选择框。
  4. STRING / STRINGS:文本行。 如果是 cmake-gui 的话会对此类缓存变量提供一个文本框。
  5. INTERNAL:文本行。但是只用于内部,不对外呈现。主要用于运行过程中存储变量,因此使用该type意味着使用FORCE

注意事项

  • 如果变量先前未定义或者使用了 FORCE 选项,则缓存变量会直接被强行赋值。
  • 可以在使用cmake构建的使用通过 -D 选项来给缓存变量赋值,这样 CMakeLists.txt 内的 set 命令只会为缓存变量添加类型。
  • 如果变量类型是目录或者文件路径,通过 -D 选项传入的若只是相对路径,那么 set 会给这个相对路径前添加当前的工作目录以变成绝对路径(如果已经是绝对路径则不会处理)。

2.3.1.3 设置环境变量

命令格式set(ENV{<variable>} [<value>])

命令含义:将环境变量设置为值<value>(注意没有…,不可为多个值),接着使用$ENV{<variable>}会得到新的值。

注意事项

  • 该命令设置的环境变量只在当前的 cmake 进程生效,既不会影响调用者的环境变量,也不会影响系统环境变量。
  • 如果 <value> 值为空或者 ENV{<variable>} 后没有参数,则该命令会清除掉当前环境变量的值。
  • <value> 后的参数会被忽略。

案例1
先设置变量,然后不跟参数。

cmake_minimum_required(VERSION 3.5)
project (set_test)

message (">>> value = $ENV{CMAKE_PREFIX_PATH}")
set (ENV{CMAKE_PREFIX_PATH} "/test/sub")
message (">>> value = $ENV{CMAKE_PREFIX_PATH}")
set (ENV{CMAKE_PREFIX_PATH})
message (">>> value = $ENV{CMAKE_PREFIX_PATH}")

输出为:

>>> value =
>>> value = /test/sub
>>> value =

案例2
在后面不跟参数也可以,在后面设置为 ""空值

cmake_minimum_required(VERSION 3.5)
project (set_test)

message (">>> value = $ENV{CMAKE_PREFIX_PATH}")
set (ENV{CMAKE_PREFIX_PATH} "/test/sub")
message (">>> value = $ENV{CMAKE_PREFIX_PATH}")
set (ENV{CMAKE_PREFIX_PATH} "")
message (">>> value = $ENV{CMAKE_PREFIX_PATH}")

输出为:

>>> value =
>>> value = /test/sub
>>> value =

3 运行结果

构建此示例的标准输出如下所示:

F-build-type $ mkdir build

F-build-type $ cd build/

F-build-type $ cmake ..
Setting build type to 'RelWithDebInfo' as none was specified.
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build

F-build-type $ make VERBOSE=1
/usr/bin/cmake -H/home/matrim/workspace/cmake-examples/01-basic/F-build-type -B/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build'
make -f CMakeFiles/cmake_examples_build_type.dir/build.make CMakeFiles/cmake_examples_build_type.dir/depend
make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build'
cd /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/matrim/workspace/cmake-examples/01-basic/F-build-type /home/matrim/workspace/cmake-examples/01-basic/F-build-type /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/DependInfo.cmake --color=
Dependee "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/DependInfo.cmake" is newer than depender "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/depend.internal".
Dependee "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/depend.internal".
Scanning dependencies of target cmake_examples_build_type
make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build'
make -f CMakeFiles/cmake_examples_build_type.dir/build.make CMakeFiles/cmake_examples_build_type.dir/build
make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build'
/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles 1
[100%] Building CXX object CMakeFiles/cmake_examples_build_type.dir/main.cpp.o
/usr/bin/c++    -O2 -g -DNDEBUG   -o CMakeFiles/cmake_examples_build_type.dir/main.cpp.o -c /home/matrim/workspace/cmake-examples/01-basic/F-build-type/main.cpp
Linking CXX executable cmake_examples_build_type
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmake_examples_build_type.dir/link.txt --verbose=1
/usr/bin/c++   -O2 -g -DNDEBUG    CMakeFiles/cmake_examples_build_type.dir/main.cpp.o  -o cmake_examples_build_type -rdynamic
make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build'
/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles  1
[100%] Built target cmake_examples_build_type
make[1]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build'
/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles 0

F-build-type $ ./cmake_example_build_type
Hello Build Type!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从零开始 CMake 学习笔记 (F)Build Type 的相关文章

  • 想免像控?RTK/PPK无人机 vs GCP 测绘精度对比

    无人机航拍测绘具有精度高 作业效率高 数据分析能力强的特点 xff0c 很大程度上解决了人工测绘的痛点 因此 xff0c 无人机在测绘工程中的应用越来越广泛 精度对于测绘从业人员来说精度至关重要 xff0c 针对RTK PPK 无人机和使用
  • ROS的GPS驱动包

    ROS WiKi地址 http wiki ros org nmea gps driver ROS功能包 xff1a nmea gps driver Package to parse NMEA strings and publish a ve
  • 【操作系统】进程切换到底是怎么个过程?

    首先 xff0c 我们要了解 xff0c 进程切换是个什么过程 xff1f 进程切换概念 其实很简单 xff0c 进程切换就是从正在运行的进程中 xff0c 收回CPU的使用权利 xff0c 交给下一个要运行的进程 实际上 xff0c 因为
  • docker设置多个环境变量

    在命令行直接使用 e或 env xff0c env file xff0c 每个变量写一次 e 2 在dockerfile里设置 这里键值是以空格分开的
  • 一些好用的c++ STL库函数

    stl可以说是懒癌患者福利了 持续更新 xff08 随缘更新 xff09 全排列函数next permutation 今天在洛谷做题的时候发现一个题简直是这个函数的完美应用 题目链接 xff1a 洛谷P1088 火星人 头文件 xff1a
  • 【FreeRTOS】中断机制

    FreeRTOS 之中断机制 在FreeRTOS中 xff0c 中断是实现实时性必要的操作 一款芯片的中断涉及到硬件触发 xff0c 软件触发 xff0c 软件中断处理 所以FreeRTOS的中断机制其实不好单独拿出来看 FreeRTOS关
  • 【VSPD虚拟串口】【Modbus Poll】【Modbus Slave】仿真工具的学习过程

    学习想法 xff1a 通信是工控行业内采集仪器仪表等设备信息的重要途径 xff0c 同时可以通过通信访问设备的工作状况对设备进行监控 xff0c 也可以通过通信对设备进行参数修改以及控制设备运行 xff0c 所以掌握通信是工控行业人员比不可
  • 【RISC-V】Trap和Exception

    文章目录 控制流 xff08 Control Flow xff09 和TrapRISC V Trap处理中涉及的寄存器mtvec Machine Trap Vector Base Address mepc Machine Exception
  • @TableId(type = IdType.AUTO)不生效问题

    随手记录一下 64 TableId type 61 IdType AUTO private Long id Cause java sql SQLException Field 39 id 39 doesn 39 t have a defau
  • Docker apt-get update报错

    在Docker改apt源出现问题 root 64 1ad3e492d821 etc apt apt get update Ign 1 http mirrors 163 com debian stretch InReleaseGet 2 ht
  • c语言 面试前必备基础知识

    目录 c语言 数据类型c语言 数据类型打印格式 c s d f lf p x o lu lldc语言 格式化输出 md 0md m nf c语言 常用字符的ASCII值c语言 变量 常量c语言 变量c语言 变量命名规范c语言 变量存储类型
  • **make[2]: *** [CMakeFiles/offb_node.dir/build.make:84:报错解决

    make报错很有可能是因为CmakeList里面的文件没有修改好 xff01 如果是cpp文件的话需要修改下面两部分 xff1a 1 修改的第一处 xff1a 把节点修改成自己文件的节点就可以 2 修改的第二处 xff1a
  • Ubuntu18.04下ROS+Gazebo+Mavros+PX4安装教程(最新!最全!)

    一 依赖安装 span class token function sudo span span class token function apt span span class token function install span nin
  • 在Gazebo仿真中修改仿真环境 (World)

    这一步是要把初始环境改成白色地板环境 xff0c 跑仿真或者基于地标降落的时候更容易观察 xff0c 让人看着也比较舒服 这一步只需要修改下面代码 原代码 xff1a xff08 初始环境 xff09 span class token op
  • 关于Arduino、树莓派和 Pixhawk微处理器对比分析

    摘要 xff1a Arduino是一款基于微控制器 xff08 单片机 xff09 的电子开发板 xff0c 它可以运行一些相对比较简单的应用程序 包含硬件 xff08 各种型号的Arduino板 xff09 和软件 xff08 Ardui
  • 关于STARMAC旋翼机的计算系统组成分析

    摘要 xff1a STARMAC xff0c 全称为 the Stanford Testbed of Autonomous Rotorcraft for Multi Agent Control xff0c 是斯坦福大学为为了突破先前飞行器笨
  • 读史铁生随笔摘要

    人可以走向天堂 xff0c 不可以走到天堂 物质的天堂注定难为 xff0c 而精神的天堂恰于走向中成立 永远的限制是其永远成立的依据 无所眺望或有所眺望都证明到达之地并非圆满 xff0c 而你若永远地走向它 xff0c 你便随时都在它的光照
  • IMAX B6电路原理详解

    IMAX B6电路原理详解 本文出自 手电大家谈 xff0c 原帖 xff1a http www shoudian org thread 447417 1 1 html
  • arduino实验第三代码

    include lt avr eeprom h gt define PinA 2 中断0 define led1 1 define led2 3 define led3 4 define led4 5 define da 6 define
  • pytorch总结——1:初步introduction

    pytorch简介 先说Torch xff0c 这是一个与Numpy类似的张量 xff08 Tensor xff09 操作库 xff0c 与Numpy不同的是Torch对GPU支持的很好 xff0c Lua是Torch的上层包装 但是Lua

随机推荐

  • pytorch_RNN相关函数介绍

    1 RNN背景介绍 RNN结构 参数介绍 input size 输入x的特征数量 hiddien size 隐藏层的特征数量 num layers RNN的层数 nonlinearity 指定激活函数是tanh还是relu xff0c 默认
  • 一些tensorflow-VIN 的笔记

    1tensorflow 使用flags定义命令行参数 2 product的执行 3 xff0c round函数 保留小数点后几位 96 a 61 1 12345 result 61 round a 2 print result 1 12 4
  • rosbag录制固定话题,多话题等

    ROS框架下可以很方便的进行数据记录 并且将其转换为txt文件进行matlab处理 下面介绍一下rosbag的日常使用方法 1 查找你所需要的话题 xff1a rostopic list 在ros节点开启的情况下 span class to
  • 相机与IMU标定教程

    标定教程 way 相机与IMU联合标定 1 imu utils 标定IMU的内参 1 imu utils标定IMU的内参 xff0c 可以校准IMU的噪声密度和随机游走噪声 2 kalibr包标定相机的内外参数 xff0c 相机与IMU之间
  • 如何在Win11中安装wsl Ubuntu系统

    目录 前言正文一 环境二 在 Windows 11 上启用 WSL四 按照官方文档进行安装五 安装ubuntu系统六 下载vcxSrv七 运行wsl八 总结 参考 前言 在笔记本上安装一下环境 xff0c 便于平常的工作 正文 一 环境 w
  • 下载PX4固件时网络太慢,经常出现克隆失败

    下载PX4固件时 xff0c 官网给的指令是 git clone https github com PX4 PX4 Autopilot git recursive 需要进行循环克隆 xff0c 在克隆过程中可能出现以下的情况 无法克隆 39
  • roslaunch mavros px4.launch 出现的问题

    在运行roslaunch mavros px4 launch fcu url 61 udp 14540 64 127 0 0 1t 14557 时出现了以下错误 xff0c 这是由于 符号是中文符号导致的 xff0c 切换成英文的即可 RL
  • 解决Ubuntu执行sudo命令后提示无法解析主机

    解决Ubuntu执行sudo命令后提示无法解析主机 异常现象异常原因查看修改主机名普通用户与管理员间的切换 异常现象 异常原因 etc hostname和 etc hosts文件中主机名称不一致导致 xff0c 将其修改一致即可 修改此文件
  • rosdep update 指令超时问题

    在执行rosdep update后出现超时问题 xff0c 报如下错误 reading in sources list data from etc ros rosdep sources list d ERROR unable to proc
  • 使用git --recursive进行循环克隆,由于网络原因,出现克隆失败的情况。

    git clone recursive 用于循环克隆git子项目 xff0c 但由于网络原因 xff0c 经常会出现克隆失败的情况 xff0c 这时不得不删掉克隆文件夹 xff0c 全部重新来过 xff0c 我们可以先将主文件克隆下来 xf
  • minimumsnap(1)微分平坦特性(Differential Flatness)

    本文内容参考论文 Minimum Snap Trajectory Generation and Control for Quadrotors Daniel Mellinger and Vijay Kumar 从名字可以看出 xff0c 我们
  • 未安装Ceres

    编译VINs的时候 xff0c 遇到了这个问题 xff0c 是没安装Ceres导致的 96 CMake Error at VINS Mono camera model CMakeLists txt 19 find package By no
  • 费雪信息场增量建场实际实验

    写在前面 上一阶段的工作是基础是在张子潮大佬的费雪信息场这几篇论文的基础上进行的 Beyond Point Clouds Fisher Information Field for Active Visual Localization Zic
  • XTDrone+VINs+fast-planner

    接下来的工作需要把XTDrone VINS和fast planner集成到一起 在XTDrone集成VINs按照XTDrone使用手册来就可以了 xff0c 按照仿真平台基础配置 xff0c PX4飞控与EKF配置和视觉惯性里程计 xff0
  • 代码随想录算法训练营第19天|77. 组合

    代码随想录算法训练营第19天 77 组合 77 组合 题目链接 提交代码 span class token keyword class span span class token class name Solution span span
  • 【无标题】

    代码随想录算法训练营第1天 216 组合总和III 17 电话号码的字母组合 216 组合总和III 题目链接 提交代码 span class token keyword class span span class token class
  • 代码随想录算法训练营第20天回溯系列

    代码随想录算法训练营第1天 704 二分查找 27 移除元素 39 组合总和 题目链接 提交代码 span class token keyword class span span class token class name Solutio
  • SMPL-CN

    paper reading 为方便理解smpl文章的主要实现思想 xff0c 此文为论文中文解读 xff0c 资料来源zju 日后有空 xff0c 会写出论文的主要推导过程以及值得注意的重点 摘要 xff1a 我们提出了一个人体形状和姿势相
  • 自动驾驶的实现之路——几大关键传感器应用解析

    来源 xff1a MEMS 随着近两年来智慧汽车 车联网等等概念的兴起 xff0c 汽车自动驾驶的各种科技进展不断占据媒体版面 xff0c 引起了全球的关注和各国政府的支持 对于大部分人来说 xff0c 吃着火锅唱着歌 轻轻松松地直达目的地
  • 从零开始 CMake 学习笔记 (F)Build Type

    从零开始 CMake 学习笔记 xff08 F xff09 Build Type 开始前先默念三遍口诀 xff1a Declare a targetDeclare target s traitsIt s all about targets