gcc、make、makefile、cmake、cmakelists区别

2023-05-16

转自:http://www.zhihu.com/question/36609459 辉常哥


1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。

2.当你的程序只有一个源文件时,直接就可以用gcc命令编译它。

3.但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大

4.所以出现了make工具
make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。

5.makefile是什么?简单的说就像一首歌的乐谱,make工具就像指挥家,指挥家根据乐谱指挥整个乐团怎么样演奏,make工具就根据makefile中的命令进行编译和链接的。

6.makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。

7.makefile在一些简单的工程完全可以人工手下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。

8.这时候就出现了Cmake这个工具,cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。

9.可是cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。

10.到最后CMakeLists.txt文件谁写啊?亲,是你自己手写的。

11.当然如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按一下那个三角形

作者:辉常哥
链接:http://www.zhihu.com/question/36609459/answer/89743845
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


cmake

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。

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

gcc、make、makefile、cmake、cmakelists区别 的相关文章

  • 全局变量在函数调用之间是否刷新?

    我正在编写嵌入式固件 发现有时很难决定何时需要易失性 当我有一个等待中断更改某个布尔标志的函数时 很明显该标志需要是易失性的 因为否则该函数将永远等待 因为编译器没有意识到该值可以通过打断 但是 当我有一个只检查第一行中的标志的短函数时 我
  • ARM、VFP、浮点、惰性上下文切换

    我正在为 ARM 处理器 Cortex A9 编写操作系统 我正在尝试实现浮点寄存器的延迟上下文切换 这背后的想法是 浮点扩展最初对线程禁用 因此不需要在任务切换上保存浮点上下文 当线程尝试使用浮点指令时 会触发异常 然后 操作系统启用浮点
  • GCC编译非常慢(文件大)

    我正在尝试编译一个大的 C 文件 专门用于 MATLAB mexing C 文件大约 20 MB 可用来自 GCC 错误跟踪器 https gcc gnu org bugzilla attachment cgi id 36632如果你想玩一
  • CMake第三方库安装

    我是编程新手 对于我的研究项目 我需要安装一个第三方库以便与 CMake 一起使用 GitHub项目 https github com cpp io2d P0267 RefImpl blob master BUILDING md 我在我的电
  • 为什么 x86-64 上的 GCC 在函数内插入 NOP?

    给定以下 C 函数 void go char data char name 64 strcpy name data x86 64 上的 GCC 5 和 6 编译 普通gcc c g o其次是objdump 这到 00000000000000
  • 所有 CopyConstructible 类型都是 MoveConstructible 类型吗?

    根据工作草案 N3337 与已发布的 ISOC 11 标准最相似的草案 和cppreference com http en cppreference com w cpp concept CopyConstructible 答案是肯定的 N3
  • 用于编译和运行 C++ 的 bash 脚本

    我正在尝试进入 C 但必须使用冗长的命令通过命令行运行东西很烦人 所以我想制作一个 bash 脚本来简化过程并运行这些命令 bin bash if 1 start then cd CCPP cd HelloWorld g Wall W We
  • CMake:Fortran 模块和编译顺序

    我有一个大型 Fortran 程序 其中包含许多目录 每个目录都在伪库中单独编译 但仍然存在相互依赖的混乱 因此最终所有伪库都组合在一个可用的库中 我想使用 Fortran 模块 但它非常脆弱 因为我不能依赖自动依赖项检查 并且根据顺序编译
  • 列出目标文件中未定义的引用

    所以我正在用 g 构建一堆模块 我使用 c 命中一些源文件来生成 o 目标文件 然后 我有时会使用 ld 的 r 标志组合目标文件 以生成更多 o 文件 在此过程中的某个地方 某个功能没有被包含在内 所以我想做的是找到一个快速工具 它可以查
  • 如何在cmake中静态链接到glibc

    我正在尝试从 Fedora 构建一个可以在 RedHat 6 机器上运行的包 所以我需要构建和静态链接一些RedHat机器中不存在的库 我发现我可以你 static libgcc or static libstdc 与标准库的静态版本链接
  • CMakeLists.txt:30(项目)处的 CMake 错误:找不到 CMAKE_C_COMPILER

    我正在尝试使用 CMake 制作 Visual Studio 解决方案来编译最新版本的 aseprite 并且 CMake 不断向我提供 No CMAKE C COMPILER could be found No CMAKE CXX COM
  • 如何正确初始化“min”变量?

    我的代码中有一个小问题 用于从一系列数字中查找最小值 当我初始化时min 0 最小值结果为0 但是当我不初始化时min 答案是正确的 为什么会出现这种情况 Xcode 告诉我应该初始化min多变的 int a 20 0 int max 0
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • libstdc++新标准库功能支持表

    是否有一个表格指定新标准 11 和 14 支持previousGNU libstdc 的版本 我找到了这样的表compiler https gcc gnu org projects cxx0x html并为当前的库状态 https gcc
  • 如何在 Bazel 中禁用 C/C++ `-Werror` 构建错误? (又名:如何关闭已由“-Wall -Werror”打开的特定警告)

    我在构建时遇到以下错误 has undefined behavior Werror Wundefined reinterpret cast Bazel 构建从此完全停止clang llvm编译器 Wundefined reinterpret
  • 如何配置 cmake 以链接到预构建的共享库?

    我有一个项目 在子目录中包含 opencv 的预构建版本 例如 我的项目 CMakeLists txt src 第三者 CMakeLists txt 开放式CV 包括 库 我想链接位于third party目录中的opencv版本 我的问题
  • CMake AUTOMOC,文件位于不同文件夹中

    我有一个简单的 CMake 项目 proj project folder a h a cpp CMakeLists txt CMakeLists txt cmake minimum required VERSION 3 2 set CMAK
  • 局部变量在栈中的顺序是怎样的?

    我目前正在尝试对缓冲区溢出漏洞进行一些测试 这是易受攻击的代码 void win printf code flow successfully changed n int main int argc char argv volatile in
  • glibc 堆一致性检查

    根据2008年的帖子 我现在找不到 glibc 堆检查 http www gnu org s libc manual html node Heap Consistency Checking html在多线程环境中不起作用 现在还是2010年
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我

随机推荐

  • VSCode的REST Client指南,超好用的HTTP客户端工具

    我最新最全的文章都在 南瓜慢说 www pkslow com xff0c 欢迎大家来喝茶 xff01 1 简介 在做Web应用开发的时候 xff0c 经常需要测试Web接口 xff0c 就需要一些客户端来发送HTTP请求到服务端 常用的客户
  • 开源自己做的4.3寸触摸屏,SWM32单片机+LVGL

    十一假期抽时间把SWM32S做的触摸屏板的综合程序弄了一下 xff0c 板子硬件资源如下 xff1a SWM32S单片机 xff0c LQFP 64封装 xff0c 内置8MB的SDRAM 4 3寸16位RBG接口电容触摸屏 xff0c 8
  • 盘点国产RISC-V内核的单片机

    RISC V就不必多说了 xff0c 它是一个基于精简指令集的开源指令集架构 与主流的主流的架构为x86与ARM架构不同 xff0c 其特点就是完全开源 今天跟大家一起盘点一下国产RISC V内核的单片机 1 GD32VF103系列 兆易创
  • 单片机通过WIFI模块(ESP8266)获取网络时间与天气预报

    前几天发布了开源4 3寸触摸屏的文章 开源4 3寸触摸屏 xff0c 里面有WIFI获取时间和天气预报相关的功能 xff0c 今天就来介绍一下这个功能是怎样实现的 1 底层驱动 首先 xff0c 硬件上 xff0c 单片机通过串口AT指令访
  • 开源贴片机OpenPnp使用体验

    平时做板子比较多 xff0c 一直想整一个贴片机 xff0c 但是据说国产的桌面贴片机用起来都不咋地 xff0c 而且价格也不菲 xff0c 带视觉的将近2W 思来想去选择了OpenPnP xff0c 一方面价格便宜 xff0c 另一方面开
  • 【干货】STM32通过ADC模拟看门狗实现掉电保存

    1 前言 很多时候我们需要将程序中的一些参数 数据等存储在EEPROM或者Flash中 xff0c 达到掉电保存的目的 但有些情况下 xff0c 程序需要频繁的修改这些参数 xff0c 如果每次修改参数都进行一次保存 xff0c 那将大大降
  • 【开源项目】SFUD--通用串口Flash驱动库的移植和使用

    1 简介 SFUD 是一款开源的串行 SPI Flash 通用驱动库 由于现有市面的串行 Flash 种类居多 xff0c 各个 Flash 的规格及命令存在差异 xff0c SFUD 就是为了解决这些 Flash 的差异现状而设计 xff
  • STM32F0系列中断向量映射问题

    最近用Cortex M0内核的STM32F030K6T6做个东西 xff0c 需要做IAP升级 xff0c 发现它的中断向量与M3 M4等内核的单片机不太一样 xff0c 这里分享给大家 IAP升级需要一个BootLoader程序 xff0
  • STM32定时器实现红外接收与解码

    1 NEC协议 红外遥控是一种比较常用的通讯方式 xff0c 目前红外遥控的编码方式中 xff0c 应用比较广泛的是NEC协议 NEC协议的特点如下 xff1a 载波频率为 38KHz 8 位地址和 8位指令长度 地址和命令2次传输 xff
  • SPI读写SD卡速度有多快?

    SD卡是一个嵌入式中非常常用的外设 xff0c 可以用于存储一些大容量的数据 但用单片机读写SD卡速度一般都有限 xff08 对于高速SD卡 xff0c 主要是受限于单片机本身的接口速度 xff09 xff0c 在高速 实时数据存储时可能会
  • SPI方式读写SD卡速度有多快?

    很久没有写公众号了 xff0c 一方面忙 xff0c 另一方面也不知道写些什么内容 xff0c 大家如果有想了解的 xff08 前提是我也懂 xff09 xff0c 可以后台发送给我 今天主要来测试一下SPI读写SD卡的速度 SD卡是一个嵌
  • 火狐浏览器添加脚本(可代替手动做一些操作)

    首先打开火狐浏览器的更多组件 xff0c 在扩展中搜索Greasemonkey 然后点击安装 安装成功后点立即重启 重新打开浏览器后浏览器右上角会有一个猴子的图标 点击下标按钮 xff0c 新建用户脚本 xff0c 新建用户脚本可以随意命名
  • SDIO读写SD卡速度有多快?

    前两天测试了SPI方式读写SD卡的速度 SPI方式读写SD卡速度测试 xff0c 今天来测试一下SDIO方式的读写速度 测试条件 xff1a 单片机 xff1a STM32F407VET6 编译环境 xff1a MDK 5 30 43 HA
  • STM32CubeMx+HAL库实现USB CDC+MSC复合设备

    之前的文章中介绍过STM32的USB应用 xff0c 包括虚拟串口 xff08 CDC xff09 和大容量存储设备 xff08 MSC xff09 今天来介绍USB实现CDC和MSC复合设备的方法 硬件 xff1a STM32F407VE
  • 基于STM32CubeMx的USB CDC+MSC复合设备

    之前的文章中介绍过STM32的USB应用 xff0c 包括虚拟串口 xff08 CDC xff09 和大容量存储设备 xff08 MSC xff09 今天来介绍USB实现CDC和MSC复合设备的方法 硬件 xff1a STM32F407VE
  • go标准库httputil.ReverseProxy简单介绍和使用避坑

    很久没水博客了 xff0c 今天就来水一篇 xff0c 说说go标准库的httputil ReverseProxy httputil ReverseProxy顾名思义 xff0c http的反向代理 xff0c 可以类比nginx的反向代理
  • (二)Ardupilot软件分析及代码架构

    先要搞明白ardupilot是怎么实现飞行控制的 xff1f 然后再看文件 1 建立两个基本坐标系 xff1a 地理坐标系和载体坐标系 xff0c 保证两个基本坐标系的正确转化 一般使用旋转矩阵实现坐标系转换 xff1a 四元数运算 q01
  • STM32F103 实例应用——实现透传转发串口

    一 预期准备 实现机制 xff1a 空闲中断 43 DMA中断接收不定长串口数据 开发工具 xff1a STM32F103芯片 xff0c keil5 xff0c usb转ttl工具 预计实现效果 xff1a 串口1接收数据然后透传给串口2
  • 解决:ORA-06550 字符串长度限制在范围 (1...32767)

    错误信息 ORA 06550 第 1 行 第 782 列 PLS 00215 字符串长度限制在范围 1 32767 解决 本例是配置存储过程job的job action 61 gt 39 Declare FLAG Number 20 FAI
  • gcc、make、makefile、cmake、cmakelists区别

    转自 xff1a http www zhihu com question 36609459 辉常哥 1 gcc是GNU Compiler Collection xff08 就是GNU编译器套件 xff09 xff0c 也可以简单认为是编译器