本文主要是介绍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 本质都是一个东西的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!