个人总结的CMakeLists.txt和Makefile的区别(以及catkin_make和cmake的区别)

2023-05-16

 

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

 

https://blog.csdn.net/qianbin3200896/article/details/103557942?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.control&dist_request_id=bf685014-b3f2-4584-889e-0c9b2b87b9c5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.control

1. CMake简介

本教程面向Linux系统,重点讲解CMake的基本使用方法,用于构建C++项目。采用的平台为Jetson Nano嵌入式开发板,arm64系统。当然,本教程同样适合绝大部分Linux平台。在讲解CMake使用方法之前,先要了解gcc、make和MakeFile的概念。

gcc(GNU Compiler Collection)即为GNU编译器套件,也可以简单认为是编译器,它可以编译很多种编程语言,包括C、C++、Objective-C、Fortran、Java等。当程序只有一个源文件时,直接就可以用gcc命令编译它。但如果源文件太多,一个一个编译就会显得非常繁琐,于是研发人员想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具。make是一个自动化编译工具,可以使用一条命令实现完全编译。前提是需要编写一个规则文件,make依据该规则文件来批处理执行编译,这个文件就是makefile。对于一个大工程,编写makefile是件极其复杂的事,手动编写不仅耗时且容易出错,于是研发人员又想到,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢,于是就出现了CMake工具,它能够输出各种各样的makefile或者project文件,从而帮助开发人员减轻负担。但是随之而来也就是编写cmakelists文件,它是CMake所依据的规则。值得注意的是,相对于编写makefile文件,编写cmakelists文件要简单的多。下面这张图完整显示了实际编译的各个步骤及相互关系:

可以看到,CMake生成的makefile文件还不是可执行文件,需要再经过make生成后才是最终的二进制可执行文件。

简而言之,对于实际的C++工程来说,采用CMake工具可以减少项目编译所需要的繁琐工作,简化并加快开发人员生成最终的程序。

 

 

 

 

再看下面这个就看得懂了

https://blog.csdn.net/jay463261929/article/details/53859616

 

 

catkin_make和cmake都是用CMakeLists.txt ,两个的CMakeLists.txt有些许不同。catkin_make是用在ROS下面的。cmake的CMakeLists.txt是通用的C++的都可以用的。

catkin_make相当于对cmake的扩展,适配ROS。

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

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

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

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

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

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

个人总结的CMakeLists.txt和Makefile的区别(以及catkin_make和cmake的区别) 的相关文章

  • php ftp 建立多个目录

    这是我的 PHP 代码 它实际上工作得很好 newftpdir parent date Ymd YYYYMMDD newftpdir child ext folder username newftpdir newftpdir parent
  • 执行 [ FILE1 -ot FILE2 ] 在 make 和 shell 中产生不同的结果

    From Bash 初学者指南表 7 1 https tldp org LDP Bash Beginners Guide html sect 07 01 html 我们可以说 FILE1 ot FILE2 将产生True if FILE1比
  • 如何在 R CMD 构建中使用 Makefile

    我正在开发一个 R 包 它基于一个仅使用 Makefile 的项目 其中大部分很容易翻译成R CMD build工作流程 然而 我需要创建的 pdf 有点复杂 除非我修补 否则我无法正确地创建它们 到目前为止 我想出了如何使用 Makefi
  • MinGW C 编译器“无法编译简单的测试程序”

    我想将 MinGW 作为 C 编译器运行 MinGW 已从 Chocolatey 安装 调用是通过 CMake 从 gitlab runner 进行的 这失败了 cmake G MinGW Makefiles DCMAKE C COMPIL
  • 这些 g++“多重定义”错误是怎么回事?

    我正处于一个项目的早期阶段 请阅读 昨天刚刚开始 我正在设置我的初始 makefile 这非常简单 以下是该文件的完整内容 all main o resource o g o output exe main o resource o mai
  • C:创建静态库并使用 Makefile 进行链接

    我在尝试着了解静态和共享库 http randu org tutorials c libraries php 我想执行以下操作来创建一个单独编译和链接的 makefile 以便创建和链接静态库 形成最终的静态可执行文件 我有以下 Makef
  • 创建一个简单的 Makefile 来构建共​​享库

    我正在尝试创建一个非常基本的手工制作的 Makefile 来创建一个共享库来说明一点 这是我到目前为止所拥有的 SHELL bin sh CC gcc FLAGS std gnu99 Iinclude CFLAGS fPIC pedanti
  • 如何在 Windows 上通过 Vim 使用 MinGW make

    我已经在我的机器上安装了 Vim 和 MinGW 所以我尝试创建 Hello World 然后在 Vim 中编译 一切正常 但是当我输入时 make它显示错误 make not recognized as an internal or ex
  • rm -rf 与 -rm -rf

    在 Makefile 中 我读到 rm rf 而不是 rm rf Makefile 行开头的第一个 是什么意思 代表着make本身将忽略来自的任何错误代码rm In a makefile 如果任何命令失败 则make进程本身会停止处理 通过
  • 使用 make 构建多个二进制文件

    我想创建一个 Makefile 在父目录中 来调用其他几个 Makefile 在子目录中 这样我就可以通过仅调用一个父 Makefile 来构建多个二进制文件 每个项目子目录一个 我的研究因在递归 Makefile 上找到大量内容而受到阻碍
  • Makefile 依赖项,什么是依赖项?

    我有一个关于 makefile 依赖关系的概念性问题 这是因为我在网上看到了关于此的不一致之处 假设我有以下文件 main cpp uses gt my math cpp and my strings cpp my math cpp use
  • 如何制作轨道时间戳

    make 如何保留文件的时间戳 我正在尝试将我的 git 存储库部署到位 我正在为大多数不会改变的文件添加预编译的二进制文件 现在 当我从 git 签出存储库时 我不想编译这些 c 文件 我想使用这些预构建的二进制文件 因此 为了设置这个方
  • makefile 中的路径不起作用

    我正在运行以下命令makefile哪些需要改变dir到特定目标并在那里运行npm install 问题是我能够在输出中看到它将目录 项目 应用程序 打印到正确的目录 但安装 npm install 在上层 项目 上运行 为什么 例如 当我运
  • VIM:有没有一种简单的方法可以从 Vim 管理 Visual Studio 解决方案/makefile 项目? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我尝试使用 Visual Studio 而不是 VIM 插件 但说实话 VS 相对于 VIM 的唯一优势是它能够自动管理我的项目 我知道 VS
  • 编辑 CMakeLists.txt 以使用 -fPIC 进行编译

    我正在尝试为名为 libnifalcon 的 NOVINT Falcon 安装驱动程序 我使用 cmake 创建 make 文件 但是当我运行 make 时出现错误 Linking CXX shared library lib libnif
  • 在 Makefile 的先决条件列表中使用目标的目录路径

    我编写了一个脚本 它接收两个以 cfg 结尾的文件并输出一个以 cmp 结尾的文件 我想将其包含在我的 Makefile 中 因为一些源代码文件依赖于此 cmp 文件 在我的 Makefile 中 我想这样做 cmp cfg dir def
  • 通过相同的 Makefile 生成 Makefile 的包含文件

    在我的程序中 我有一个有点复杂的构建过程 目前 在我使用的一个目录中include in Makefile am对于一个文件 该文件不存在 但必须自行构建 原因是这个包含文件相当长 此外 在实际程序中 它不仅仅是一个文件 而是多个文件 并且
  • 从 Makefile 中的 C++FLAGS 中删除一个标志?

    我有一个 Makefile 其中包含另一个设置了很多默认值的 makefile 我无法编辑包含的 makefile 并且我想更改 makefile 中 C FLAGS 的值 即使它是在包含的 makefile 中设置的 具体来说 每当 de
  • 如何不在输出中打印 makefile 中的注释

    我有一个像这样的 makefile install somecommand some explanation for next command lastcommand 发生的事情是评论 some explanation for next c
  • @:(符号冒号)在 Makefile 中意味着什么?

    Makefile 中的以下内容有何作用 rule deps 我在制作手册中似乎找不到这个 它的意思是 不要在输出中回显此命令 所以这条规则是说 执行 shell 命令 并且不回显输出 当然是shell命令 是一个空操作 所以这就是说 什么都

随机推荐