cmakelists.txt为什么这么写,为什么有这些,能不能推导出来,而不是死记。所以 gcc g++ make makefile cmake cmakelists catkin 本质都是一个东西

本文主要是介绍cmakelists.txt为什么这么写,为什么有这些,能不能推导出来,而不是死记。所以 gcc g++ make makefile cmake cmakelists catkin 本质都是一个东西,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

cmakelists为什么这么写,为什么有这些,能不能推导出来,而不是死记。

为什么添加话题也要在这里面写?

名称

要找链接库。

要生成可执行文件

这几个是好理解的。

package.xml里面写的编译依赖  运行依赖需要和 cmakelists.txt里面的相对应么。

看了这篇了解makefile的本质之后可能就好些

https://blog.csdn.net/sinat_16643223/article/details/119981757

 14:09:01
感觉还是makefile本质清晰

 14:09:16
比cmakelists简洁多了

 这样再推cmakelists就好些了。

cmakelists最后也是要生成makefile,所以最后的本质都是去链接一些文件生成可执行文件。

本质还是gcc g++那些语句

所以  gcc  g++  make  makefile  cmake  cmakelists  catkin_make  本质都是一个东西!!!!!!!!!

你之前在Ubuntu上弄TCP UDP编程的时候是自己亲自弄过g++的对吧,把cpp文件生成可执行文件。

cmakelists那么多东西不本质还是为了找到那些文件然后链接起来么,只不过换个方式表达。

为什么ROS功能包的cmakelists里面要单独写话题,因为这些自定义话题也是需要编译的,就是那些msg文件,需要编译的,生成h文件等等的,可能他们和cpp文件的编译有些区别所以单独拿出来写,我个人这么推测的。

可能找不同库的方式不一样所以写起来的语句也不一样,总之,最优要编译成功,肯定要把该有的库都链接起来的。都得在cmakelists里面写出来的。你清楚本质之后应该可以很明确这一点。

就不光知其然而知其所以然,就不用死记死背那些规则了。

所以你再自己写功能包的时候,自己用了哪些第三方库自己心里要有数,并且到cmakelists里面去添加。就是这么个道理。

现在看这个思路就比较清晰

https://gitee.com/maxibooksiyi/gpst265fusion/blob/master/src/global_fusion/CMakeLists.txt

上面的这个cmakelists结合下面这篇博文看看好很多

https://blog.csdn.net/sinat_16643223/article/details/114029013

什么STL  opencv  boost都是常用的库,这些库都需要会链接

还要会链接其他功能包,其他的库等等的。

我看下这个所用第三方库的cpp的内容,里面都没有main函数

https://gitee.com/maxibooksiyi/gpst265fusion/tree/master/src/global_fusion/ThirdParty/GeographicLib/src

 首先我觉得可以明确,第三方库,不管你是什么乱七八糟的库,还是什么Lib库,应该都是cpp和头文件组成的。首先明确这个本质,不然总是感觉他们很神秘一样。

windows里面用那些IDE要配置环境变量一个道理不然找不到那些库,现在清楚一个C++程序的本质之后很多东西就好理解。以前只知道机械地按照教程添加那些路径,死记,不知道为什么。

现在,你程序里面用了opencv库,那么你编译的时候得让你的程序找得到那个opencv,现在再去看windows下配置opencv的那些是不是好理解些了,不用死记了

windows下的visual studio就有编辑链接库的选项,现在应该明白是什么意思了吧是不是,以前只知道照着教程弄。

下面拍自《opencv4 快速入门》  P9

现在让你去windows上弄opencv,配置环境啥的我觉得你应该不会害怕了对吧。

包括我现在叫你去写一个STM32的工程代码,你现在不应该说死记一个工程目录是有哪些。而是用了哪些库调用了哪些库就有哪些,而不是死记了。

还有程序怎么链接不同版本的opencv  (《视觉SLAM十四讲》里面有讲)

不同版本的Python等等。

这篇关于cmakelists.txt为什么这么写,为什么有这些,能不能推导出来,而不是死记。所以 gcc g++ make makefile cmake cmakelists catkin 本质都是一个东西的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/506939

相关文章

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

电脑软件不能安装到C盘? 真相颠覆你的认知!

《电脑软件不能安装到C盘?真相颠覆你的认知!》很多人习惯把软件装到D盘、E盘,刻意绕开C盘,这种习惯从哪来?让我们用数据和案例,拆解背后的3大原因... 我身边不少朋友,在使用电脑安装软件的时候,总是习惯性的把软件安装到D盘或者E盘等位置,刻意避开C盘。如果你也有这样的习惯,或者不明白为什么要这么做,那么我

vscode不能打开终端问题的解决办法

《vscode不能打开终端问题的解决办法》:本文主要介绍vscode不能打开终端问题的解决办法,问题的根源是Windows的安全软件限制了PowerShell的运行,而VSCode默认使用Powe... 遇到vscode不能打开终端问题,一直以为是安全软件限制问题,也没搜到解决方案,因为影响也不大,就没有管

Python如何将大TXT文件分割成4KB小文件

《Python如何将大TXT文件分割成4KB小文件》处理大文本文件是程序员经常遇到的挑战,特别是当我们需要把一个几百MB甚至几个GB的TXT文件分割成小块时,下面我们来聊聊如何用Python自动完成这... 目录为什么需要分割TXT文件基础版:按行分割进阶版:精确控制文件大小完美解决方案:支持UTF-8编码

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Linux编译器--gcc/g++使用方式

《Linux编译器--gcc/g++使用方式》文章主要介绍了C/C++程序的编译过程,包括预编译、编译、汇编和链接四个阶段,并详细解释了每个阶段的作用和具体操作,同时,还介绍了调试和发布版本的概念... 目录一、预编译指令1.1预处理功能1.2指令1.3问题扩展二、编译(生成汇编)三、汇编(生成二进制机器语

电脑没有仿宋GB2312字体怎么办? 仿宋GB2312字体下载安装及调出来的教程

《电脑没有仿宋GB2312字体怎么办?仿宋GB2312字体下载安装及调出来的教程》仿宋字体gb2312作为一种经典且常用的字体,广泛应用于各种场合,如何在计算机中调出仿宋字体gb2312?本文将为您... 仿宋_GB2312是公文标准字体之一,仿China编程宋是字体名称,GB2312是字php符编码标准名称(简

Golan中 new() 、 make() 和简短声明符的区别和使用

《Golan中new()、make()和简短声明符的区别和使用》Go语言中的new()、make()和简短声明符的区别和使用,new()用于分配内存并返回指针,make()用于初始化切片、映射... 详细介绍golang的new() 、 make() 和简短声明符的区别和使用。文章目录 `new()`