【Linux】拆分详解 - vim / gcc / makefile

Linux C语言开发入门:从GCC编译到Makefile实战 C语言作为系统编程和底层开发的核心语言,其编译过程是理解程序构建原理的关键。在Linux环境下,GCC编译器将源代码转换为可执行文件,经历了预处理、编译、汇编和链接四个阶段,这一过程揭示了程序从文本到二进制指令的本质。掌握GCC的常用选项,如-Wall开启警告、-g嵌入调试信息,能有效提升代码质量和调试效率。对于多文件项目,Makefile通过定义依赖关系和构建规则,实现了自动化编译和增量构建,这是管理复杂工程的基础。这些技能在嵌入式开发、服务器后台和系统运维中都有广泛应用,是每位Linux开发者必须扎实掌 阅读详情


【Linux】vim gcc makefile


前言

本文介绍了 Linux 中与编程强相关的三个工具:文本编辑器,代码编译器,自动化编译器。旨在帮助初学者快速入手使用 Linux 进行代码编写与编译。

一、Linux 编辑器 - vim

0. 简介

vi/vim 的区别简单点来说,它们都是多模式编辑器,不同的是 vim 是 vi 的升级版本,它不仅兼容 vi 的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于 x window、 mac os、windows。

1. 多模式切换

​在这里插入图片描述
​

  • 默认模式为命令模式,其余模式能且仅能在命令模式中切换。

    ESC ​键可以由其他模式回到默认模式

2. 各模式常见指令操作

  • 命令模式

    1. 对光标所在行

      ① 复制 yy​

      ② 剪贴(删除)dd​

      ③ 粘贴 p​

      ④ 撤销 u​

      撤销上一次的撤销操作 ctrl + R​

      • 多行操作 n + yy/ pp/ dd​
    2. 光标快速定位

      ① 定位到文本最末尾(第 n 行) [n] shift + g = G​

      ② 定位到文本最开始 gg​

      ③ 光标局部定位​

      1. 方向控制 左下上右(历史遗留) HJKL​
      2. 定位到当前行尾 shift + 4 = $​
      3. 定位到当前行首 shift + 6 = ^​
      4. 以空格为分割的单词(多字符)作为单位,向后跳转 w​
      5. 以空格为分割的单词(多字符)作为单位,向前跳转 b​
    3. 光标所在位

      ① 从光标所在位开始(包括光标位) 向后 逐字符删除(指定字符个数)[n] x​

      ② ~ (不包括光标位)向前 ~ [n] shift + x = X​

      ③ 将光标位的字母进行大小写切换(非字母会向后跳过移动)shift + ~​

      ④ 替换(覆盖)[n] r​

      • 替换模式(输入的文本会直接覆盖掉原文本)shift + r = R​
    4. 查找字符/字符串

      ① 正向查找 /指定字符(串)​

      (从前往后),n 键跳转到下一个匹配的位置

      ② 反向查找 ?指定字符(串)​

      (从后往前),n 键跳转到上一个匹配的位置

  • 视图模式(批量行操作)

    ​ctrl + v​ 进入,​HJKL​ 等(使用光标快速定位的相关操作)选中多行

    • ​shift + i​ 进入插入模式并执行所需修改

      ​ESC​ 两次,对选中的所有行同步 插入模式执行的修改操作

    • ​d​ 删除选中行

  • 底行模式

    1. 显示行号
      :set nu​

    2. 跳转到指定行
      :数字​

    3. 保存,退出

      ① :q​
      退出,如果文件发生了修改,需要使用 !q​ ,意思是强制退出不保存修改

      ② :wq​ 保存并退出

      ③ 有时候 vim 发生了非正常退出,会临时保存一个副本,再次进入文件时会提示用户是否要恢复/删除该副本,才能继续使用 vim

      ​在这里插入图片描述
      在这里插入图片描述
      ​​

    4. 使用系统指令(不退出 vim)

      ​:!指令​

    5. 分屏,切换

      分屏 :vs 文件名​

      切换操作的文件 ctrl + w 两次​

二、gcc 使用

  1. 语法

    ​gcc [选项] 源文件 [选项] 目标文件​ 分步编译

    ​gcc -o 目标文件 源文件​ 一步生成

  2. 编译的四个阶段

    gcc -E code.c -o code.i # 1. 预处理
    gcc -S code.i -o code.s # 2. 编译
    gcc -c code.s -o code.o # 3. 编译+汇编(注意-c是小写)
    gcc -o code code.o      # 4. 链接
    
    gcc -o code code.c #直接生成可执行程序
    
  3. 动 / 静态库

    1. 动/静态链接

      动态链接,如头文件,链接到外部的公共库

      静态链接,相当于将头文件直接拷贝到可执行程序内部,不依赖外部
      在这里插入图片描述
      在这里插入图片描述
      ​​

    2. 编译器自举

      当一款新的语言诞生时,是没有相应的编译器的,拿汇编语言为例,当汇编诞生时,第一款编译器必须由开发者使用二进制指令写一款编译器(因为机器只认识二进制),而第二款和以后的更新就可以使用汇编语言编写了,只要使用第一款编译器翻译成二进制指令即可。而 C 语言也是一样的,初版 C 编译器必须使用汇编语言编写(也可以用二进制写,但是前人已经写好了汇编编译器,为什么不用呢?),而第二版及以后的所有更新就可以使用 C 语言编写了。

      简而言之,就是一款新语言的初版编译器必须使用上一代语言或者二进制编写,而后的更新才可以使用新语言编写,这称之为编译器的自举过程

三、项目自动化构建工具 - make/Makefile

1. 简介

  • 目的:自动化、局部化编译文件
  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
  • makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make 是一个命令工具,是一个解释 makefile 中指令的命令工具,一般来说,大多数的 IDE 都有这个命令,比如:Delphi 的 make,Visual C++ 的 nmake,Linux 下 GNU 的 make。可见,makefile 都成为了一种在工程方面的编译方法。
  • make 是一条命令,makefile 是一个文件,两个搭配使用,完成项目自动化构建。

2. 语法

# 目标文件 : 依赖文件列表(一整行称为依赖关系)
#			依赖方法

proc:proc.c
	gcc -o proc proc.c 
  1. 基本概念

    • 定义

      本质上 makefile 就是依赖关系和依赖方法的集合

    • 依赖关系

      proc:proc.c​ 称为依赖关系,由目标文件和依赖文件列表两部分组成

    • 依赖方法

      ​gcc -o proc proc.c​ 称为依赖方法,可以是任意指令(的集合)

      • 以 Tab 键开头,不能是空格

      • @(指令名):关闭默认的指令回显,如 @gcc -o proc proc.c​

  2. 特殊符号的使用

    • ​%​ :Linux 中的通配符号

      ​%.c​ :匹配当前目录下所有.c 文件

    • ​$​ :替换符号

      ​$(变量名)​ :将 $()​ ​整体替换为 变量存储的内容

      ​$^​ :替换为所有依赖文件列表

      ​$@​ :替换为所有目标文件

    proc.o:proc.c
    	gcc -c proc.o proc.c 
    
    #将当前目录下所有.c文件 通过gcc编译成 一个个.o文件
    %.o:%.c
    	gcc -c $< #将右侧的依赖文件一个一个交给gcc选项
    

    ​在这里插入图片描述
    ​

  3. 变量

    makefile 中的变量类似于 C 语言中的宏,没有类型,只用于存储内容替换。但需要配合替换符 $​ 才能达成替换效果

    proc:proc.c
    	gcc -o proc proc.c
    
    # 定义变量 bin,src 下方代码等同于上方代码   
    bin = proc
    src = proc.c
    
    $(bin):$(src)
            gcc $^ -o $@ # 将proc.c 编译成 proc
    

    ​在这里插入图片描述
    ​

3. 特性

  1. make

    • 直接 make​ ,默认形成 makefile 中自上而下 第一个目标文件(依据依赖关系,执行对应的依赖方法,生成目标文件)
    • 如果要形成其他目标文件(执行其他依赖关系和方法),则 make 目标文件名​
  2. 执行 gcc 命令时,如果出现编译错误,会直接终止推导过程

  3. 目标文件的修改时间晚于源文件时,make 会报错不执行

    • 原因:当目标文件的修改时间早于源文件时,说明源文件没有被修改过,那生成的目标文件不会有任何变化,make 此时认为没有必要去执行

    • ACM 时间

      ​Access​ :原意指最新的访问时间

      (但是考虑到性能消耗问题,实际上为积累到一定访问次数才更新该时间)

      ​Change​ :文件属性最新被修改的时间

      ​Modify​ :文件内容最新被修改的时间

      ​在这里插入图片描述

      注意:有时候 Modify 改变 会引发 Change 同步变化,这是因为修改文件内容可能会造成文件大小变化,而文件大小 是文件属性的一部分!

  4. 反向推导(栈结构)

    make makefile 时,如果遇到 某依赖关系中的依赖文件不存在,则不会执行该依赖关系对应的依赖方法,跳过然后向下继续推导执行其他依赖关系,如果依赖文件又不存在,则继续跳过,直到遇到依赖文件存在,再逆向执行所有依赖方法

    ​在这里插入图片描述
    ​在这里插入图片描述

这里只是为了演示反向推导的规则,我们一般没什么大病不会这样写编译过程,而是直接一步到位

proc:proc.c
	gcc -o proc proc.c

4. 综合案例 - 进度条

4.1 预备知识

  1. 回车与换行

    回车:将光标移到当前行的最前方(横向移动)

    换行:将光标原地向下移动到下一行(纵向)

    • 平时我们说的换行,大部分情况都是指回车和换行,即先回车再换行

      ​\r​ 回车

      ​\n​ 换行(c 语言中等同于 \r\n​ )

  2. 缓冲区

    • 概念和作用:

      我们的程序是运行在内存中的,printf 输出字符串时不会直接将内容写入到显示器文件中,而是先将其存入缓冲区,等到一定量后再一次性刷新到显示器,这样可以减少消耗。

      ‍

    ​在这里插入图片描述
    ​

    • 示例:

      ​在这里插入图片描述

      sleep 执行前 printf 已经完成执行了,此时字符串被输入到缓冲区,等到程序结束时会强制刷新缓冲区,我们就可以看到打印出来的内容。

      • 强制刷新:

        1. ​\n​ printf 中使用换行符会强制刷新缓冲区

          ​\r​ 不会刷新

        2. 程序结束,也会强制刷新缓冲区

        3. 使用库函数刷新标准输出流 fflush(stdout);​

4.2 代码实现

  1. 倒计时

    1. 使用 \r​ + fflush(stdout)​ 强制刷新

      在同一行不断覆盖原先打印内容,达成倒计时效果

    2. ​%-2d​ 控制字符宽度和左对齐

      • 显示器没有类型的概念,都是打印一个一个的字符

        所以 printf 的格式化输出,实际上是把各种类型格式化为字符交给显示器(让我们看起来像各种类型数,实际上输出的是一个一个的字符)

        所以打印 10,实际上是打印字符 ‘1’ ‘0’,必须控制至少占据两个宽度,否则会有’0‘残留在第二个位置上

        ​在这里插入图片描述
        在这里插入图片描述
        ​

      • printf 默认为右对齐,-​ 改为左对齐

#include <stdio.h>
#include <unistd.h>

int main()
{
    int count = 10;
    while(count >= 0)
    {
        printf("%-2d\r", count); // \r回车,但是没有换行,也就没有刷新
        fflush(stdout); 
        count--;
        sleep(1);
    }
    printf("\n"); //换行,防止命令行提示符覆盖掉最后的0
    return 0;
}
  1. 真实的进度条

    • 函数指针回调,可以使代码复用,只需传入不同的进度条刷新函数,就可以达成不同的进度条效果
process:main.c process.c
	gcc -o $@ $^
.PHONY:clean
clean:
	rm -f process
// --- process.h --- //
#pragma once
void FlushProcess(double total, double current);
// --- process.c --- //

#include "process.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <string.h>

#define NUM 101  //预留100个插入空间,剩下一个给‘/0’
#define STYLE '='
#define POINT '.'
#define SPACE ' '
const int pnum = 6;

// version 2:真实的进度条,应该根据具体的比如下载的量,来动态刷新进度
void FlushProcess(double total, double current)
{
    // 1. 更新当前进度的百分比
    double rate = (current/total)*100;

   // 2. 更新进度条主体
   char bar[NUM]; // 我们认为,1% 更新一个等号
   memset(bar, '\0', sizeof(bar)); //全部设置为\0,如有新内容插入就直接覆盖
								   // 可以使得printf打印完插入的内容就停止打印
   for(int i = 0; i < (int)rate; i++)
   {
       bar[i] = STYLE;
   }

   // 3. 更新旋转光标或者是其他风格
   static int num = 0;
   num++;
   num %= pnum; // %= 控制始终为 pnum长度的光标循环

   char points[pnum+1];
   memset(points, '\0', sizeof(points));
   for(int i = 0; i < pnum; i++)
   {
       if(i < num) points[i] = POINT;
       else points[i] = SPACE;
   }

   // 4. test && printf
	//单行动态显示 + 预留空间显示
   printf("[%-100s][%.1lf%%]%s\r", bar, rate, points);
   fflush(stdout);
   //sleep(1);
}
// --- main.c --- //

#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
#include "process.h"

typedef void (*flush_t)(double total, double current);// 这是一个刷新的函数指针类型

const int base = 100;
double total = 2048.0; // 2048MB
double once = 0.1;     // 0.5MB

// 进度条的调用方式
void download(flush_t f)
{
    double current = 0.0;
    while(current < total)
    {
        // 模拟下载行为
        int r = rand() % base + 1; // [1, 10]
        double speed = r * once;
        current += speed;
        if(current >= total) current = total;
        usleep(10000);

        // 更新除了本次新的下载量
        // 根据真实的应用场景,进行动态刷新
        //Process(total, 1.0);
        f(total, current);
        //printf("test: %.1lf/%.1lf\r", current, total);
        //fflush(stdout);
    }
    printf("\n");
}

int main()
{
    srand(time(NULL));
    download(FlushProcess);

    return 0;
}

总结

本文介绍了 Linux 中与编程强相关的三个工具:文本编辑器,代码编译器,自动化编译器。旨在帮助初学者快速入手使用 Linux 进行代码编写与编译。

尽管文章修正了多次,但由于水平有限,难免有不足甚至错误之处,敬请各位读者来评论区批评指正

Linux C语言开发环境搭建:从GCC编译到Makefile项目构建全解析 在Linux系统上进行C语言开发,理解编译工具链是构建高效开发环境的基础。GCC(GNU Compiler Collection)作为核心编译器,其工作流程涵盖了预处理、编译、汇编和链接四个关键阶段,这是程序从源代码到可执行文件的完整转化过程。掌握GCC的编译原理不仅能解决常见的“未定义引用”等链接错误,更是学习大型项目构建工具(如Makefile)的基石。通过分步编译和常用编译选项(如-O2优化、-g调试)的实践,开发者可以深入理解代码优化与调试信息的生成。在多文件项目管理中,静态库与动态库的创建与使用, 阅读详情

相关推荐

6.VIM编辑器与GCC编译器

VIM是一个类似于Vi的文本编辑器,不过在Vi的基础上增加了很多新的特性,Vim普遍被推崇为类Vi编辑器中最好的一个。文本编辑器是Linux操作系统中的重要工具。其中,VIM是使用最广泛的文本编辑器,VIM的全称是“Visual interface IMproved”,即“改良的视觉交互界面”。使用VIM编辑器能够在任何shell、字符终端或基于字符的网络连接中使用,无需GUI,就能够高效地在文件中进行编辑、删除、替换、移动等操作。VIM是一个基于shell的全屏幕文本编辑器,没有菜单,全部操作都基于命令

【Linux】工具介绍——vim及gcc

在Linux操作系统之中有很多使用的工具,我们可以用vim来进行程序的编写,然后用gcc来生成可执行文件,最终运行程序。本文来带大家了解,以及,这三个工具的使用方法。

qq_68601751的博客 2224

vim+gcc+gdb使用合集

You have to believe in yourswlf when no one else does-that makes you a winner right there——–你必须在没有人相信你时相信自己,这能使你成为赢家。 文章目录一, vim常用命令二, gcc基本用法三, gdb基本使用 这篇博客是小黑总结出来查询用的功能文档,适合已经对Linux系统有所了解的小白,喜欢的同学可以收藏。希望能帮到大家提高效率。 一, vim常用命令 命令/编辑模式切换 [i/ESC] 以下操作都是在esc模式下的 以上都是本人经常用到的命令,也是比较实用的命令。 如果vim只是具有这些基本

开发编辑器vi/vim的使用、gcc编译工具的使用

【Linux】 开发编辑器vi/vim & gcc编译工具 的使用

m0_56051805的博客 1923

【2023版】基于JT808/JT1078协议的车载视频监控平台开发实战-开源架构解析

本文详细解析了基于JT808/JT1078协议的车载视频监控平台开发实战,涵盖协议核心作用、开源架构设计、开发避坑指南及二次开发建议。重点介绍了JT1078协议在音视频传输中的优化方案,以及海量位置数据存储、高可用架构等关键技术点,为开发者提供全面的实战参考。

weixin_26965807的博客 235

用Python实现斗地主游戏(终端版)

马上就要过年了 大家也都放假了吧 过年必不可少的活动 打牌! 今天带大家来写一份斗地主 (又是好多天没怎么更新,忙成狗啊) 那么实现一个斗地主呢 我们肯定要先完善卡牌系统 from collections import Counter import numpy as np import itertools def cmp_to_key(mycmp): 'Convert a cmp= function into a key= function' class K: def _

Miku_wx的博客 9855

【Linux】vim编辑器 | gcc编译器

好了,此时你已经拥有了一个强大的vim配置和gcc编译器,但是这仅仅只是冰山一角,当代码有错误的时候,难道每次都要生成一个可执行文件?又该如何调试代码?这就是下一章的内容了,老铁焖,加油啊!

weixin_64132124的博客 1536

WandB本地部署踩坑指南:从Docker启动到License更新的完整流程(附常见错误解决方案)

本文详细介绍了Weights & Biases(WandB)机器学习实验管理平台的本地化部署全流程,涵盖从Docker环境搭建、许可证管理到常见错误排查的实战经验。针对企业级应用场景,文章还提供了性能优化、高可用架构设计及开源替代方案Trackio的评估与迁移策略,为构建安全、可控的内部实验追踪平台提供完整解决方案。

potato的博客 567

【Linux工具】:软件包管理器yum | 编辑器vim | 编译器gcc/g++ | 调试器gdb | 自动化构建工具make/Makefile | Linux小程序:进度条 | git命令行

我们学习 Linux 主要是在上面做开发的 —— 写代码、编译代码、调试代码、自动化构建项目、上传 github/gitee。在这里我们一共会介绍 5 - 6 个工具 —— 软件包管理器 yum、文本编译器 vim、代码编译器 gcc/g++、调试器 gdb、自动化构建项目 make/Makefile、以及 Linux 上的 git 的命令行。......

DanceBit的博客 3206

面板数据分析中的随机前沿软件FRONTIER Version 4.1应用

随机前沿模型是一种用于评估单位效率的统计方法。它考虑了输入和输出的随机性,允许我们在效率评估中引入不确定性。随机前沿模型通常用于评估生产单位、金融机构、医院等各种类型的决策单元的效率。FRONTIER是一个广泛使用的随机前沿分析软件,具有用户友好的界面和强大的功能。它提供了估计效率、前沿分析和模型比较的工具,使用户能够深入研究单位的效率和绩效。面板数据是一种包含多个单位(通常是时间序列数据)的数据类型,可以用于分析单位在不同时间点的变化和效率。

目标检测专栏持续更新中,改进YOLO系列通用,适用v5、v7、v8、所有博客均是团队原创博客,所有文章禁止转载,违者必究。 2982

思科9117AP从零配置EWC模式实战:Wi-Fi6网络搭建避坑指南

本文详细介绍了思科9117AP在Wi-Fi6网络环境下配置EWC模式的实战指南,涵盖镜像准备、网络环境配置、模式转换步骤及高级运维技巧。通过EWC模式,企业可实现控制器与AP的一体化部署,显著降低成本和简化运维,特别适合中小企业Wi-Fi6网络搭建。

weixin_28318011的博客 333

Linux基础指令,vim,gcc,gdb,git,makefile基础操作

编译(Compiling):在编译阶段,预处理后的源代码将被转换为汇编语言。汇编(Assembling):在汇编阶段,汇编器接受编译器生成的汇编代码文件,并将其转换为机器可执行的二进制目标文件。预处理(Preprocessing):在这个阶段,gcc 会根据源代码中的预处理指令对代码进行预处理。需要注意的是,该命令会直接删除文件或目录,并且在删除之前没有任何提示信息,请谨慎使用。它允许你按页浏览文本文件,适用于较长的文件内容。命令还可以用于将多个文件的内容合并,并输出到一个文件或标准输出。

2301_76606232的博客 585

Linux新手必看:FinalShell连接不上?从检查IP到配置固定地址的完整排错指南

本文为Linux新手提供了FinalShell连接失败的完整排错指南,涵盖IP检查、SSH服务状态、防火墙配置和静态IP设置等关键步骤。通过详细的命令行操作和配置示例,帮助用户快速解决远程连接问题,提升Linux使用效率。

weixin_30675247的博客 753

【Linux庖丁解牛】—gcc/g++&make/Makefile!

在我们的实际开发中,不可能将所有代码放在⼀个源⽂件中,所以会出现多个源⽂件,⽽且多个源⽂件之间不是独⽴的,⽽会存在多种依赖关系,如⼀个源⽂件可能要调⽤另⼀个源⽂件中定义的函数,但是每个源⽂件都是独⽴编译的,即每个*.c⽂件会形成⼀个*.o⽂件,为了满⾜前⾯说的依赖关系,则需要将这些源⽂件产⽣的⽬标⽂件进⾏链接,从⽽形成⼀个可以执⾏的程序。它的主要功能是确定文件的类型。上面说到过make的好处就是让我们的工程编译更加的方便,但是到目前为止,我们并没有看到make命令让我们的编译更加方便,甚至还更加复杂了。

2301_80221228的博客 1465

【Go语言实战】(26) 分布式搜索引擎

基于go语言的分布式搜索引擎

面向生活编程 2379

CAD二次开发c# .net加载cui\cuix菜单文件

public static void LoadMyCui(string cuiFile) { Document doc = Application.DocumentManager.MdiActiveDocument; object oldCmdEcho = Application.GetSystemVariable("CMDECHO"); object oldFileDia = Application.GetSys..

2127

【Linux】五.《Linux 开发环境完全指南:软件安装、vim、gcc/g++ 与 make/Makefile》

镜像:指一个物体、图像、数据或系统,以对称轴 / 对称面为基准,形成左右相反、结构完全一致的复刻副本,内容与原对象完全相同,仅空间方向反转。镜像站点:完全同步主站数据的备用服务器,用于分流、加速访问、容灾备份。大白话就是现在的很多云服务都是外国的社区发明的国内上基本用不了,但其中不乏有一些国内的成员在里面,就想办法通过一些方式让国内也可以用,这种方式就叫做镜像。

2501_93351213的博客 679

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Linux开发三剑客:vim、gcc与makefile实战指南

点击'项目生成'按钮,等待项目生成完整后预览效果 实际开发中这三个工具往往配合使用:vim编写代码->gcc调试单个模块->makefile组织整个项目。在InsCode(快马)平台可以直接体验完整开发流程,无需配置环境就能快速验证各种命令效果,特别适合学习阶段随时测试代码片段。平台提供的终端模拟器完全还原Linux操作体验,配合自动保存功能再也不怕意外退出导致代码丢失。

BlackironFalcon78的博客 696

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

初识Linux下的gcc与makefile

最近在学linux相关的操作,接触到makefile文件,在此做个笔记 文章目录gcc1.预处理2. 编译3.汇编4.链接makefile不使用makefilemakefile格式第一个makefile看第二个makefile gcc gcc常用命令选项: 刚接触linux时,关于gcc编译器只会用形如 gcc hello.c 的命令来对代码进行编译(实际上这个命令是一键完成上面四个编译过程的),对整个编译过程还不了解,以至于后面在接触makefile的编写时出问题。现在先来看一看gcc的基础知识: 如

qq_35027690的博客 914

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Linux编辑器gcc/g++的使用以及Makefile的用法

gcc/g++的使用以及Makefile的用法

m0_66304647的博客 984

云服务器vim配置和指令,gcc和make的使用

vim的配置和使用,gcc预处理汇编编译链接等过程,make和Makefile的使用

m0_61780496的博客 1184

Ubuntu系统下使用gcc指令和makefile编译C程序

Ubuntu系统下使用gcc指令和makefile编译C程序

weixin_51707087的博客 1178

在Ubuntu系统下用gcc和Makefile两种方式编译程序

​ 本文目的是在Ubuntu系统上编译C程序来回顾在Linux系统上编写C程序的操作方法。主要采用两种方式进行编译:gcc 命令行方式和Makefile方式。 ​

m0_59066136的博客 1611

熟练使用Linux编译工具(gcc, g++, make, makefile)

本文介绍了C/C++程序的编译流程和自动化构建工具make/makefile的使用。编译过程分为预处理、编译、汇编和链接四个阶段,每个阶段对应不同的gcc选项(-E、-S、-c)。文章详细讲解了动静态库的区别,动态库通过地址加载节省内存,而静态库会完整复制代码。最后重点介绍了makefile的编写方法,包括依赖关系定义、变量替换和伪目标设置等技巧,并展示了如何通过makefile实现自动化编译和清理。这些知识对提高C/C++开发效率具有重要意义。

buhuizhiyuci的博客 514

《Linux从0到99》四 Linux编译器(gcc/g++)和调试器(gdb)

本文主要讲了 1.Linux下编译器gcc、g++的使用。 2.调试器gdb的用法 3.makefile文件的编写

RONIN_WZ的博客 1597

面试官问 Linux 编译调试?gcc 编译流程 + gdb 断点调试 + git 版本控制,连 Makefile 都标好了

本文聚焦 Linux 开发进阶工具,详解 gcc/g++ 编译四阶段、动态 / 静态链接与库原理,解析 make/Makefile 自动化构建逻辑,实战进度条程序,还涵盖 git 版本控制与 gdb/cgdb 调试核心用法,完善 Linux 开发工具链知识体系。

2403_88424194的博客 1338
上一篇: 【C++】拆分详解 - 模板
下一篇: 【C++】拆分详解 - 继承
如泡似影
博客等级 码龄3年 812粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值