cmakelists.txt

CMakeLists.txt文件 1. 一个简单的例子 工程文件所包含的文件如下: 1) src文件夹:包含工程需要的cpp、h文件 2)build文件夹:生成可执行文件等的地方 3)main.cpp: 主函数 4)CMakeLists.txt: 将需要的.h和.cpp文件包含进来,需要链接的库包含进来,然后在不同的平台使用CMake调用各自的编译器生成各自的工程。通过cmake 生成makefile文件,有 阅读详情

文件CMakeLists.txt是CMake构建系统的输入,用于构建软件包。 任何兼容CMake的软件包都包含一个或多个CMakeLists.txt文件,这些文件描述了如何构建代码以及将代码安装到何处。 用于柳絮项目的CMakeLists.txt文件是标准的香草CMakeLists.txt文件,带有一些其他约束。

您的CMakeLists.txt文件必须遵循此格式,否则您的软件包将无法正确构建。 配置中的顺序不计算在内。

Required CMake Version (cmake_minimum_required)

Package Name (project())

Find other CMake/Catkin packages needed for build (find_package())

Enable Python module support (catkin_python_setup())

Message/Service/Action Generators (add_message_files(), add_service_files(), add_action_files())

Invoke message/service/action generation (generate_messages())

Specify package build info export (catkin_package())

Libraries/Executables to build (add_library()/add_executable()/target_link_libraries())

Tests to build (catkin_add_gtest())

Install rules (install())

常用变量

  1. 预定义变量
    PROJECT_SOURCE_DIR:工程的根目录
    PROJECT_BINARY_DIR:运行 cmake 命令的目录,通常是 ${PROJECT_SOURCE_DIR}/build
    PROJECT_NAME:返回通过 project 命令定义的项目名称
    CMAKE_CURRENT_SOURCE_DIR:当前处理的 CMakeLists.txt 所在的路径
    CMAKE_CURRENT_BINARY_DIR:target 编译目录
    CMAKE_CURRENT_LIST_DIR:CMakeLists.txt 的完整路径
    CMAKE_CURRENT_LIST_LINE:当前所在的行
    CMAKE_MODULE_PATH:定义自己的 cmake 模块所在的路径,SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake),然后可以用INCLUDE命令来调用自己的模块
    EXECUTABLE_OUTPUT_PATH:重新定义目标二进制可执行文件的存放位置
    LIBRARY_OUTPUT_PATH:重新定义目标链接库文件的存放位置

  2. 环境变量
    使用环境变量

$ENV{Name}
写入环境变量

set(ENV{Name} value) # 这里没有“$”符号
3. 系统信息
­CMAKE_MAJOR_VERSION:cmake 主版本号,比如 3.4.1 中的 3
­CMAKE_MINOR_VERSION:cmake 次版本号,比如 3.4.1 中的 4
­CMAKE_PATCH_VERSION:cmake 补丁等级,比如 3.4.1 中的 1
­CMAKE_SYSTEM:系统名称,比如 Linux-­2.6.22
­CMAKE_SYSTEM_NAME:不包含版本的系统名,比如 Linux
­CMAKE_SYSTEM_VERSION:系统版本,比如 2.6.22
­CMAKE_SYSTEM_PROCESSOR:处理器名称,比如 i686
­UNIX:在所有的类 UNIX 平台下该值为 TRUE,包括 OS X 和 cygwin
­WIN32:在所有的 win32 平台下该值为 TRUE,包括 cygwin

细节

  1. makefile是有条理的gcc编译命令文件.利用make工具来执行Makefile的编译指令.一般利用cmake和autotools来自动生成cmake.

  2. cmake用来读取Cmakelists.txt文件语句,最终生成Makefile文件.

当定义的target依赖另外一个target,确保在源码编译本target之前其他target已经构建,使用

ADD_DEPENDENCIES

说白了要说明白先编译谁再编译谁

  1. INSTALL用于定义安装规则,安装的内容包括,目标二进制,动态库,静态库,文件,目录,脚本等.

  2. 静态库:在链接其他目标时候使用;动态库:运行时候加载

这两种库都发生在链接阶段:

(1)静态库,库中目标文件的所有将被程序使用的函数的机械码,被copy到最终可执行文件中;移植方便,运行效率高但占用内存空间大.对程序更新不太好.

(2)动态库:在程序运行时才被载入.可执行文件只是包含了它所需要函数的引用表,而不是函数代码.只有当程序执行的时候,那些需要的代码才会被拷贝到内存中.因为是在程序运行的时候被载入的,所有解决了静态库对程序的更新,部署和发布带来的麻烦.进程之间资源共享.但是依赖性强.(牺牲时间换取空间效率)

  1. 链接内部库

生成共享库,给自己和给别人用都很方便.

LIBRARY_OUTPUT_PATH 设置库文件输出路径

  1. 添加外部链接库

链接库导入的是,头文件和库文件. 顺序先头文件导入再库文件链接

导入库文件的几点尝试:
(1)利用绝对路径导入

(2)利用install导入 CMAKE_INSTALL_PREFIX 设置安装路径,安装库的位置,再分别导入库的头文件和库文件

(3)利用find_package的方式导入;camke要手动配置,有模块模式和配置模式.指令按照优先级在指定路径查找Findxxx.cmake和xxxConfig.cmake.

cmake能找到其中一个就能成功使用库

<NAME>_FONDif(<NAME>_FOND)找到库的标志
<NAME>_INCLUDE_DIR or <NAME> _INCLUDESfind_path(<NAME>_INCLUDES)库的头文件路径
<NAME> _LIBRARY <NAME> _LIBSfind_library(<NAME>_LIBS)库文件路径

REQUIRED选项,如果没有找到包的配置文件,Cmake将停止编译并且产生错误

QUIET选项,如果没有找到包的配置文件,Cmake会产生一个warning

  1. catkin_package() 放到里面说明供外部使用 catkin是工具,catkin包

  2. 外部使用特别简单,直接在.xml中<depend>lib </depend>

  3. 当我们使用CMake find_package(...)命令roscpp作为参数时一样,我们不仅将获得的构建标志 roscpp,而且还将获得其依赖项的所有标志。这大大简化了将依赖项合并到我们的程序中的过程。pkg-config但是与find_package(...)命令不同,该命令查找CMake配置文件,该文件包含与Pkg-Config .pc文件在语义上相同的信息。也与Pkg-Config不同,此CMake命令不是特定于平台的。

  4. 运行find_package(roscpp),自动定义了几个CMake的变量,包括但不限于${roscpp_INCLUDE_DIRS}, ${roscpp_LIBRARY_DIRS}和${roscpp_LIBRARIES}。这些变量遵循许多CMake配置文件使用的标准命名约定。然后可以将这些变量传递到标准CMake命令中,如CMakeLists.txt上面的 文件所示。

    此外,通过将可选REQUIRED参数添加到中find_package(...),如果未找到该软件包,CMake将报告人类可读的错误。

    CMake需要知道在哪里可以找到软件包。在一些地方可以进行CMake搜索,但是这些软件包对CMake的暴露方式是通过 $CMAKE_PREFIX_PATH环境变量进行的。对于ROS库,您可以(再次)确保您已经获得/opt/ros/hydro/setup.bash,或者可以显式设置路径

export CMAKE_PREFIX_PATH=/opt/ros/hydro:$CMAKE_PREFIX_PATH
  1. 开始使用Catkin的最简单方法是将教程项目声明为“ catkin程序包”。这是通过catkin_package()CMake函数完成的(在此处进行了记录。catkin通过CMake的标准find_package()机制找到软件包后,该函数才可用.

踩过的坑

launch文件中的<node>元素pkg的值就是cmakelists.txt中project()的值.而不是文件名.

DSPACE仿真平台的使用 DSPACE仿真平台的使用 文章目录DSPACE仿真平台的使用1.ModelDesk新建项目2.MotionDesk引入项目3.ControlDesk引入项目4.项目整合运行 我们使用DSPACE仿真平台软件来模拟小汽车的自动驾驶。 总共需要用到DSPACE大类下的三个软件:ModelDesk、ControlDesk、MotionDesk。 1.ModelDesk新建项目 在桌面上点击ModelDesk图标,打开DSPACE—ModelDesk 选择 File 标签,侧边栏选择 New,点击 New A 阅读详情

相关推荐

基于STM32的3D打印机控制

通过本项目,我们成功搭建了一个基础的3D打印机控制系统,能够控制步进电机和加热元件。这为使用STM32开发功能丰富的3D打印机提供了基础,您可以在此基础上继续扩展功能,如增加LCD显示、SD卡存储、联网控制等功能。在这个项目中,我们将使用STM32微控制器开发一个基础的3D打印机控制系统。通过控制步进电机、加热元件和温度传感器,我们将实现一个简单的FDM(熔融沉积制造)3D打印机控制。- 检查PWM信号的生成功能,确认加热元件的控制逻辑是否正常。- 增加适当的滤波和校准算法,以提高温度读取的准确性。

2401_88938661的博客 1503

CMakeLists.txt详解

个人总结

m0_53685032的博客 2万+

STM32G474多通道ADC电压采集:软件触发与单次转换实战

本文详细介绍了STM32G474多通道ADC电压采集的实战方法,重点讲解了软件触发与单次转换的实现技巧。通过硬件设计、HAL库配置、多通道轮询采集及数据处理等环节的详细解析,帮助开发者高效完成精确电压采集任务。文章还提供了常见问题调试技巧和性能优化建议,适用于需要高精度电压监测的嵌入式应用场景。

weixin_28720767的博客 463

CMakeLists.txt 文件详解

命令时,指定 CMakeLists.txt 文件的路径,CMake 会读取该文件并根据其中的命令和配置生成相应的构建系统文件(如 Makefile、Visual Studio 解决方案等)。然后,使用生成的构建系统文件进行构建操作。这些只是 CMakeLists.txt 文件中的一些常见命令和配置选项,CMake 提供了更多的功能和灵活性,可以根据项目需求进行进一步的配置和定制。其他命令和配置:CMake 提供了许多其他命令和配置选项,可以根据具体需求进行配置,如设置输出路径、定义宏、配置测试等。

clayhell的博客 5888

桌面云架构讲解(VDI、IDV、VOI/TCI、RDS)

什么是云桌面桌面云是虚拟化技术成熟后发展起来的一种应用,桌面云通常也称为云桌面、VDI等桌面云中的云一般指的是企业的数据中心,通过在数据中心的服务器上安装若干个虚拟机,这个虚拟机就是桌面;但是终端无法直接连接到这个虚拟机(云桌面),因此就需要通过技术将就虚拟机变为桌面云发放出来;发放出来之后只需要瘦客户端(PC、手机、瘦客户机等)连接到数据中心的云桌面服务器平台,最终就可以连接到桌面来进行使用云桌面的优势终端与数据信息分离,数据在后台集中处理和存储 ,数据实现统一管理。

m0_49864110的博客 3万+

全国排污许可证数据

from tkinter import * # 导入窗口控件 import tkinter.filedialog import requests from lxml import etree from tkinter import ttk from bs4 import BeautifulSoup import webbrowser # 调用浏览器打开网页 from tkinter import messagebox # 弹出提示框 from openpyxl import Workbook imp.

Newnotes的博客 3385

CMake是什么?有什么用?

CMakeCMake是一个跨平台的编译(Build)工具,可以用简单的语句来描述所有平台的编译过程。CMake能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。假如我们有一个深度学习框架的部分工程列表,里面有超过40个互相调用的工程共同组成,一些用于生成库文件,一些用于实现逻辑功能。他们之间的调用关系复杂而严格,如果我想在这...

The Best or Nothing. 10万+

【一】PCIe基础知识

Linux PCIe基础知识

他山之石 可以攻玉 4万+

CMakeList.txt

一、Cmake 简介 cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。 二、常用命令 1. 指定 cmake 的最小版本 cmake_minimum_required(VERSION 3.4.1) 这行命令是可选的,我们可以不写这句话,但在有些情况下,如果 CMakeLists.txt ...

zhangna的博客 1241

FPGA时序分析中的工艺角:从PVT原理到建立保持时间验证

在数字电路设计中,静态时序分析(STA)是确保芯片功能正确和性能达标的核心验证手段。其基本原理是通过计算信号在逻辑路径上的传播延迟,检查建立时间和保持时间是否满足寄存器采样要求。这项技术的核心价值在于,它能在芯片制造前就预测并消除时序违规,极大提高设计成功率。然而,实际芯片性能会受到工艺波动、电压变化和温度漂移(合称PVT)的显著影响。为了覆盖这些不确定性,时序分析必须采用基于工艺角的边界模型——用最慢的工艺角模型验证建立时间,用最快的工艺角模型验证保持时间。这种分析方法广泛应用于FPGA和ASIC设计流程

weixin_30181209的博客 198

《YOLOv12魔术师专栏》专栏介绍 & 专栏目录

《YOLOv12魔术师专栏》专栏介绍 & 专栏目录

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 5059

CMakeLists.txt 编写规则

参考:CMake 保姆级教程(上)​subingwen.cn/cmake/CMake-primer/#2-6-3-%E6%80%BB%E7%BB%93​编辑cmake使用详细教程(日常使用这一篇就足够了)_cmake教程-优快云博客​blog.csdn.net/iuu77/article/details/129229361?

m0_63086198的博客 3475

《FreeRTOS 入门与实战》第20章:移植到 RISC-V 平台

处理器上下文保存/恢复机制中断处理与任务切换的协同时钟源配置(通常使用 Machine Timer)平台特定的汇编代码实现// 典型RISC-V移植文件结构FreeRTOS/├── Source/portable/[编译器]/RISC-V/│ ├── port.c // 关键移植接口│ ├── portASM.s // 汇编级处理│ └── portmacro.h // 架构宏定义。

2301_79143213的博客 449

CMakeLists.txt 怎么写

写程序的大体步骤就是:首先用编辑器编写源代码,如.c文件;然后经过预处理、编译和汇编生成可重定位目标文件,也就是.o(Unix下)文件;最后通过链接器将所有的.o以及用到的库文件链接成可执行文件。但是当源文件越来越多时,一个个地编译就会特别麻烦,于是人们设计了一种批量处理源文件的工具,也就是Make,一种自动化编译工具,可以通过一条命令实现完全编译。为了实现以上功能,需要编写一个规则文件,也就是Makefile。

jzpfbpx的博客 864

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

CMakeLists.txt

PROJECT_SOURCE_DIR 使用 cmake 命令后紧跟的目录,一般是工程的根目录PROJECT_BINARY_DIR 执行 cmake 命令的目录CMAKE_CURRENT_SOURCE_DIR 当前处理的 CMakeLists.txt 所在的路径CMAKE_CURRENT_BINARY_DIR target 编译目录EXECUTABLE_OUTPUT_PATH 重新定义目标二进制可执行文件的存放位置。

qq_41301277的博客 1137

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

CMakeLists.txt的简单学习教程汇总

最近因为要编辑一个T265的例程,但是里面的CMakeLists中的含义自己不明白,在网上搜集了一些资料,对自己学习进行一下总结也是让需要的人更加明白清楚。

Lu_gl的博客 4834

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PX4 CMakeLists.txt 文件剖析

PX4 CMakeLists.txt 文件剖析 前面对于 PX4 的 Makefile 已经做了比较详细的分析, 这里进一步对 PX4 的 CMakeLists.txt 文件结构进行进一步的分析. 1 CMake 简述 CMake 是一个DSL( Domain Specific Language), 主要用来辅助对代码的编译配置和管理, 其具有跨平台, 可维护性较好的特点, 目前在 C++ 项目中...

lipi37的博客 2539

CMakeLists.txt 详解

CMakeLists.txt 详解

sunxiaoyan的博客 1万+

CMakeLists.txt学习

方式2. 如果一个项目中源文件过多,在编写CMakeLists.txt文件的时候不可能将项目中目录的各个文件一一罗列出来,所以在cmake中我们提供了搜索文件的命令,就是file,当然除了搜索外。在CMakeLists.txt所在目录要删除执行cmake命令生成的文件,重新执行cmake才会让哪些文件生成在build文件中,然后在build文件目录下执行make命令才会生成可执行文件。GLOB_RECURSE:递归搜索指定目录,将搜索到的满足条件的文件名生成一个列表,并将其存储到变量中。

m0_62995834的博客 916

CMakeLists.txt分享

CMake作为主流跨平台构建工具,通过编写CMakeLists.txt文件描述项目构建需求。本文详解CMake核心配置方法,包括:项目基础设置(版本要求、语言标准)、源文件管理策略(显式列举/GLOB模式)、目标构建(可执行文件/静态库/动态库)、依赖管理(find_package/pkg-config)、平台差异处理(Windows/macOS/Linux)以及安装规则配置。

Mr_-G,一名勤奋底层软件开发工程师的博客 823

c++ CMakeLists.txt详解

LANGUAGESCCXXFortranbinlibetc子模块的。

www_dong的博客 2030
上一篇: 如何在Anaconda的python和系统自带的python之间切换
下一篇: yolo 踩过的坑与aconda安装指定版本包(持续更新)
黑猫爱小鹿
博客等级 码龄8年 1万+粉丝 205原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值