03_GCC与Makefile的使用

2023-11-01

windows下c语言的编译

1、预处理

把.h .c展开形成一个文件。宏定义直接替换,还有头文件、库文件的展开形成.i文件

对应的GCC

gcc -e hello.c -o hello.i

2、汇编

生成汇编文件

gcc -s hello.i -o hello.s

3、编译

生成一个.o .obj

gcc -c hello.s -o hello.o

4、链接

windows下生成.exe linux下生成.elf

gcc hello.o -o hello

linux下的编译-Makefile

根据我通过视频的学习,现在文件夹下touch一个Makefile名称的文件,然后进行编辑。

找不到Makefile的代码块,所以用c语言代码块进行书写。

# 代表注释

目标文件:依赖文件
[TAB]指令

hello:hello.c
	gcc hello.c -o hello
//然后在当前目录下使用 make 指令即可

伪命令

.PHONY:
clear:
	rm -rf hello
clearall:
	rm -rf /*
//在当前目录下使用指令 make clear 指令进行调用,这会执行clear后的指令

恒等替换

// = 代表替换, :=代表恒等于, +=代表追加

TAR = test
OBJ = 1.o 2.o 3.o
CC := gcc

$(TAR):$(OBJ)
	$(CC)  $(OBJ) -o $(TAR)
//在使用时要注意 $() 的格式

通配符的使用

// %.c 代表任意一个c文件 *.c 代表所有任意的c文件

TAR = test
OBJ = 1.o 2.o 3.o
CC := gcc

$(TAR):$(OBJ)
	$(CC)  $(OBJ) -o $(TAR)

%.o:%.c
	$(CC) -c %.c -o %.o
// $^ 代表所有的依赖文件, $@ 所有的目标文件, $< 所有依赖文件的第一个文件.................

最终一个例子
假如在目录下有1.c 2.c .3c,我要将他们编译成一个test输出。

test:1.o 2.o 3.o
	gcc 1.o 2.o 3.o -o test
1.o:1.c
	gcc -c 1.c -o 1.o
2.o:2.c
	gcc -c 2.c -o 2.o
3.o:3.c
	gcc -c 3.c -o 3.o

.PHONY:
clearall:
	rm -rf 1.o 2.o 3.o test
clear:
	rm -rf 1.o 2.o 3.o

//加强版
TAR = test
OBJ = 1.o 2.o 3.o
CC := gcc
RM := rm -rf

$(TAR):$(OBJ)
	$(CC)  $@ -o $^
%.o:%.c
	$(CC) -c %.c -o %.o

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

03_GCC与Makefile的使用 的相关文章

  • Oracle数据库报错ERROR at line 1:ORA-01157: cannot identify/lock data file 9

    自说 今天在打开了好久没有打开的rac数据库时 重启数据库进入open模式时发生了以下错误 经过简单筛查后发现是因为之前创建的数据文件删除掉了 因为我这里是保存到了本地中 E盘下 未找到导致报错 我们可以查看 set linesize 19
  • Linux-IO Target(LIO SCSI Target)介绍(二)

    使用targetcli创建loop Target和vhost Target 除了常见的SAN Target之外 Linux IO Target还支持两种特殊的Target loop和vhost 其中loop Target可以为本机模拟一个完
  • Linux 信号学习

    Linux 信号学习 信号量的基本概念 信号产生的条件 信号如何被处理 信号的异步特质 信号的分类 可靠信号 不可靠信号 实时信号 非实时信号 常见信号与默认行为 信号处理 signal 函数 sigaction 函数 向进程发送信号 ki
  • Linux的GPIO子系统解析 ( 一 ) 之 gpiolib.c

    文章目录 Linux的GPIO子系统解析 一 之 gpiolib c 绪论 关于GPIO子系统库文件的gpiolib c解析 drivers gpio gpiolib c gpio desc结构体 gpio chip结构体 gpio ens
  • 查询CPU的核数

    超线程技术就是利用特殊的硬件指令 把两个逻辑内核模拟成两个物理芯片 让单个处理器都能使用线程级并行计算 进而兼容多线程操作系统和软件 减少了CPU的闲置时间 提高的CPU的运行效率 超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CP
  • 基础配置Tomcat及使用

    配置Tomcat 背景简介 目前很多网站由java编写 所以解析Java程序需要有相关的软件来编写完成 Tomcat是其中之一 Tomcat技术先进 性能稳定且免费 是目前比较流行的web应用服务器 Tomcat是一个轻量化级应用服务器 实
  • Linux dstat监控工具简讲

    1 小声哔哔 记得在19年的年末 我第一次接触sar命令时将其奉为经典 至今看来仍不为过 可见我之前的博客 运维入门必备Linux sar命令 说回今天我们的工具dstat 与sar命令很相像 都很全面且强大 但是dstat更类似于看板 可
  • vscode远程开发及公钥配置(告别密码登录)

    文章目录 vscode远程开发及公钥配置 简介 关于远程开发官网简介 关于SSH简介 环境 插件安装 配置服务器 找到配置文件 修改配置文件 连接服务器 配置密钥 简介 密钥生成 服务器上安装公钥 查看或配置打开密钥登录功能 服务器私钥复制
  • ping: www.baidu.com: Temporary failure in name resolution

    虚拟机突然访问不了百度了 查看发现网络都是好的 root zk02 ping www baidu com ping www baidu com Temporary failure in name resolution 经查修改下如下配置文件
  • svn实现容灾备份

    Svn的容灾备份和数据恢复 环境声明 这里采用svn的镜像备份 搭建SVN在我的上一篇博客中 搭建部署SVN服务器 源版本路径 svn 192 168 244 134 ceshi 镜像版本 ip 192 168 244 132 建立镜像版本
  • bash下的单方括号和双方括号

    bash下的单方括号和双方括号概念以及用法 一 bash 单括号 两个符号左右都要有空格分隔 内部操作与操作变量之间要有空格 val gt10 字符
  • inux启动输入密码出现module is unknown

    当启动输入密码无法登录时 重启按下e键 在linux16这一行中找到ro 将ro改变为rw 并在结尾添加init bin sh 查看 var log secure日志文件中排查错误 最终发现是 lib security pam limits
  • Linux中TAB补全显示设备空间不足问题

    今天在使用linux中习惯性的使用tab键进行补全信息 发现无论在何处按下tab都会显示这样报错 图中因为我用了xshell工具 这里报错是中文的 这个时候要检查下自己的空间是否充足 可使用df查看设备目录使用空间大小 可以将一下不用的目录
  • centos 安装alien

    出处 http linux4you in install netapp oncommand system manger on centos 1 在root权限下执行命令 sudo su 2 安装alien需要的依赖包 yum y insta
  • Linux系统与管理 - (三)Linux常用命令解析

    自说 学习路径 目录和文件 查找目录和文件 查看文件 压缩及解压 自说 操作Linux系统必不可少的常用命令 坚持学习吧 每天一点点 总归是有收获的 学习路径 Linux系统与管理 一 安装Linux系统 Linux系统与管理 二 Linu
  • 【日志工具】g3log_6_ROS1中g3log的安装&使用

    ROS1中g3log的安装 使用 基于ros1 melodic版本进行封装使用 g3log库安装 git clone https github com KjellKod g3log git cd g3log git checkout c 1
  • Linux系统与管理 - (六)用户与组❤

    自说 学习路径 用户管理 用户管理命令 组管理 组管理命令 目录和文件的权限 自说 在Windos系统中 用户的概念我们并不陌生 它是一种身份也是一种权限 不同的用户也相应有着不同的使用 下面细说下Linux中的用户与组 学习路径 Linu
  • 常见的八种导致 APP 内存泄漏的问题

    像 Java 这样具有垃圾回收功能的语言的好处之一 就是程序员无需手动管理内存分配 这减少了段错误 segmentation fault 导致的闪退 也减少了内存泄漏导致的堆空间膨胀 让编写的代码更加安全 然而 Java 中依然有可能发生内
  • WSL 修改默认用户

    通常可以通过以下命令来指定进入 wsl 的时候使用的用户 wsl u
  • linux学习2:定时任务

    1 crontab命令 crontab e 编辑crontab定时任务 crontab l 查询定人任务 crontab r 删除当前用户所有的定时任务 1 1 每分钟将home路径下的详细信息保存到 home ls txt中 cronta

随机推荐

  • win10+系统更新服务器失败怎么回事啊,windows10系统更新失败如何解决

    很多用户都开始升级windows10系统 而在使用过程中经常会需要更新 然而有时候可能会遇到更新失败的情况 很多用户不知道要怎么解决 其实方法很简单 这就给大家讲解一下windows10系统更新失败的具体解决步骤 方法一 在操作前 需要先查
  • Android应用程序的Activity启动过程简要介绍和学习计划

    Android应用程序的Activity启动过程简要介绍和学习计划 分类 Android 2011 08 14 15 46 41045人阅读 评论 19 收藏 举报 android button encoding layout 框架 在An
  • 哪吒社区 - 风火轮计划

    目录 风火轮计划 全新起航 风火轮计划内容 一 Java零基础入门 二 Java基础教程系列 三 SpringBoot系列教程 加入方式 1 连续七天参与Java技能树每日打卡活动 2 发表一篇标题为 哪吒社区Java技能树 的学习博客 记
  • 程序员副业大揭秘:如何利用技术优势实现财富自由?

    前几天 我写了一篇文章 工资 喂饱肚子 副业 养活灵魂 职场人的生存之道 然后很多人就问 程序员这么忙 哪有时间去搞副业啊 昨天 我在知乎上正好看到一个类似的问题 我就用这个问题 回答一下大家对做副业的疑问 还是以我为例吧 是卷技术 还是空
  • make[2]:***没有规则制作目标XXX,由XXX需求。停止。

    记录一次驱动编写中遇到的错误 写了一个简单的驱动 编写Makefile 内容如下 模块名称 obj m xxx o kernel路径 KDIR yyy zzz 获取当前路径 PWD shell pwd all make C KDIR M P
  • 用Python爬虫做一个短视频+评论下载小工具

    成品展示 复制以上代码用于视频下载 按照以上步骤获取评论路径复制 选择要保存到哪个文件夹中 输入复制的视频地址和评论地址 保存完成 获取音视频部分主要代码 只是主要功能代码 def get data urls address respons
  • 基于SpringBoot的冬奥会科普平台

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SpringBoot 前端 采用Vue和HTML技术开发 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Ec
  • 方法-学术翻译工具

    1 推荐谷歌 2 其它
  • python学习笔记03

    函数 def functionname parameters 函数文档字符串 functionsuite return expression args 可变参数 可以是从零个到任意个 自动组装成元组 kw 关键字参数 可以是从零个到任意个
  • numpy

    一 什么是维度 需要几个维度描述一个空间 一维 x 二维 x y 三维 x y z 1 1 创建NumPy数组的多种方式 创建NumPy数组的多种方式 array 将输入数据转换为ndarray 推断dtype或显示指定 arange 类似
  • 机器学习—关联规则分析之Apriori算法及其python实现

    文章目录 引言 一 一些概念 1 关联规则的一般形式 2 最小支持度和最小置信度 3 项集 4 支持度计数 二 Apriori算法 使用候选产生频繁项集 1 Apriori的性质 2 Apriori算法实现过程 3 Apriori算法实现过
  • Pandsa时间序列采样频率滑窗及重采样

    目录 Pandas时间序列采样频率滑窗 1 滑窗函数rolling 获取近7天的销售总量 2 shift 及 diff 重采样 resample pandas时间戳及时间差 pandas日期处理DT对象 Pandas时间序列采样频率滑窗 1
  • SpringBoot发送邮件

    目录 1 获取授权码 2 jar包引入 3 配置application 4 代码实现 1 获取授权码 以126邮箱为例 点开设置 选择POP3 SMTP IMAP 开启POP3 SMTP服务 新增授权密码 扫码二维码 发送要求的短信内容到指
  • 狂神说Mybatis课程笔记

    文章目录 1 第一个Mybatis程序 1 1 搭建环境 1 2 创建一个模块 1 3 编写代码 1 4 测试 2 CURD 增删改查 2 1 namespace 2 2 Select insert update delete 2 3 分析
  • 测试多线程任务

    作业需求 任务1 定义一个全局变量 int a 10 主线程能否访问到 分支线程能否访问到 任务2 分支线程中修改上述的a 20 问主线程中访问该a 是10还是20 任务3 在主线程定义一个局部变量int b 1 分支线程能否访问到b 任务
  • 光纤光缆基础知识

    光纤介绍 光纤布线中使用光波的几个波段 800nm 900nm 短波波段 1250nm 13500nm 短波波段 1500nm 1600nm 短波波段 多模光纤运行波长为850nm或1300nm 而单模光纤运行波长则为1310nm或1550
  • 微服务网关鉴权:gateway使用、网关限流使用、用户密码加密、JWT鉴权

    点击关注 芋道源码 2022 09 05 10 32 发表于上海 收录于合集 芋道源码1000个 点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 10 33 更新文章 每天掉亿点点头发 源码精品专栏 原创
  • 使用BPMN和微服务进行编排 ——是好做法还是坏做法?

    马丁 Martin Fowler 在他著名的微服务文章中建议 敏捷的终端和愚笨的管道 他指出 微服务社区赞成另一种方法 敏捷的终端和愚笨的管道 从微服务构建的应用程序旨在尽可能地解耦和衔接 他们拥有自己的域逻辑 而更多地在经典的Unix意义
  • c语言指针实现冒泡排序及其优化

    冒泡排序是一个十分容易实现的算法 简单说明一下 假设数组长度为 N 要求从小到大排序 1从第一个数开始比较相邻两个元素 如果前面的数据大于后面的数据 就将二个数据交换 2对数组元素进行一次第一次遍历后 最大的数据就 沉 到了数组最后一个位置
  • 03_GCC与Makefile的使用

    windows下c语言的编译 1 预处理 把 h c展开形成一个文件 宏定义直接替换 还有头文件 库文件的展开形成 i文件 对应的GCC gcc e hello c o hello i 2 汇编 生成汇编文件 gcc s hello i o