分文件编程——Makefile

1.分文件编程

1.1源文件:

.c结尾的文件
包含main函数的.c
包含子函数的.c

1.2头文件:

.h结尾的文件
文件包含
头文件、宏定义、typedef、结构体、共用体、枚举、函数声明…
调用时用#include"xx.h"
#include< >与#include " "区别?
< >去系统默认路径下搜索头文件
" "先再当前路径下搜索,如果找不到就去系统默认路径下查找
系统默认搜索路径?
/usr/include
/usr/local/include

2. 编译工具

2.1gcc编译工具

预处理:#开头内容,展开头文件、替换宏定义、删除无用注释,不会检查语法错误
gcc -E xx.c -o xx.i
编译:检查语法错误,有错就报错,无错就继续生成汇编文件
gcc -S xx.i -o xx.s
汇编: 将汇编文件生成不可执行的二进制文件
gcc -c xx.s -o xx.o
链接: 链接库文件,生成可执行的二进制文件
gcc xx.o -o xx

2.2gdb调试

gcc -g xx.c
gdb a.out
r:运行代码
l:查看文件
b 行号:添加断点
info b:查看断点信息
d num:删除断点,num是断点的编号(通过info b查看)
p 变量名:查看变量的值
s/n:单步运行,s会进入子函数顺序执行,n不会进入子函数,直接调用结束
c:执行到下一个断点的位置
help:帮助
q:退出
步骤:代码写好后,可以先通过gcc -g进行编译,没有错误后可以通过gdb a.out进行调试
,输入l查看文件内容,通过b设置断点,输入r运行到断点,然后通过n或s可以进行单步调试,q退出

3. make

3.1定义

make:工程管理器
make工程管理器就是一个“自动编译管理器”这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作。
Makefile或makefile是make读取的唯一配置文件

3.2Makefile格式

目标:依赖
命令
注意:命令前敲TAB
例如:写一个test.c文件,再写一个Makefile文件编译
在这里插入图片描述

为了避免同名文件可以加如下指令,利用clean伪目标执行删除指令

在这里插入图片描述

3.3Makefile管理多个文件

首先创建多个文件,如:
在这里插入图片描述
写一个Makefile文件:
在这里插入图片描述
执行
make
./test

3.4Makefile变量

自己定义的变量:一般用大写表示变量名,取变量的值用$(变量名)
= 递归方式展开
:= 直接赋值(当前的值是什么就立即赋值)
+= 追加新的值
?= 判断之前是否定义,如果定义了,不重新赋值,否则赋值

3.4.2预定义变量

RM 文件删除程序的名称,默认值为rm -f
CC C编译器的名称,默认值为cc。
CPP C预编译器的名称,默认值为$(CC) –E。
CFLAGS C编译器的选项,无默认值。
OBJS 生成的二进制文件或目标文件,自己定义

3.4.3自动变量

$< 第一个依赖的名称
$@ 目标文件的完整名称
$^ 所有不重复的依赖的名称
最后makefile可不断简化
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/501262.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对DataFrame中的缺失值采用插值实现缺失值处理interpolate()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 对DataFrame中的缺失值 采用插值实现缺失值处理 interpolate() [太阳]选择题 以下代码的输出结果中正确的是? import pandas as pd a pd.DataFrame({ A: [1, 2, None, 4, 5], …

数字乡村发展之路:探索农村智慧化新模式

一、引言 随着信息技术的迅猛发展和普及&#xff0c;数字化已经成为推动乡村发展的重要引擎。数字乡村建设旨在通过信息化、智能化手段&#xff0c;提升农村地区的生产生活水平&#xff0c;推动农村经济社会的转型升级。本文旨在探讨数字乡村的发展之路&#xff0c;分析农村智…

基于java+springboot+vue实现的电商个性化推荐系统(文末源码+Lw+ppt)23-389

摘 要 伴随着我国社会的发展&#xff0c;人民生活质量日益提高。于是对电商个性化推荐进行规范而严格是十分有必要的&#xff0c;所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套电商个性化推荐系统&#xff0c;帮…

Docker镜像逆向生成Dockerfile

你是否曾经遇到过一个想要使用的 Docker 镜像&#xff0c;但却无法修改以适应你的特定需求&#xff1f;或者你可能发现了一个喜欢的 Docker 镜像&#xff0c;但想要了解它是如何构建的&#xff1f;在这两种情况下&#xff0c;将 Docker 镜像逆向生成一个 Dockerfile 可以使用一…

【电子取证篇】哈希校验值的变与不变

【电子取证篇】哈希校验值的变与不变 哈希值&#xff08;散列值&#xff09;是针对电子数据内容来计算的&#xff0c;内容变则哈希变&#xff1b;但计算对象的文件名、文件时间等属性改变不会影响散列值&#xff01;&#xff01;&#xff01;—【蘇小沐】 &#xff08;一&…

HarmonyOS实战开发-如何实现一个简单的电子相册应用开发

介绍 本篇Codelab介绍了如何实现一个简单的电子相册应用的开发&#xff0c;主要功能包括&#xff1a; 实现首页顶部的轮播效果。实现页面跳转时共享元素的转场动画效果。实现通过手势控制图片的放大、缩小、左右滑动查看细节等效果。 相关概念 Swiper&#xff1a;滑块视图容…

【C++】多态的原理

目录 一、虚函数表 1、虚函数表的定义 2、虚函数表特性 3、虚表的打印 二、多态的原理 三、多态的相关问题 1、指针偏移问题 2、输出的程序是什么&#xff1f; 3、输出的程序是什么&#xff1f; 【前言】 上一篇我们学习了多态的基础知识&#xff0c;这一篇我将带着大…

vivado 生成比特流或器件镜像

在生成比特流或器件镜像之前 &#xff0c; 请复查其设置 &#xff0c; 确保这些设置对于您的设计都正确无误 &#xff0c; 这一点至关重要。 Vivado IDE 中的比特流和器件镜像设置分为 2 种类型 &#xff1a; 1. 比特流或器件镜像文件格式设置。 2. 器件配置设置。 在 V…

大数据-hive,初步了解

1. Hive是什么 Hive是基于Hadoop的数据仓库解决方案。由于Hadoop本身在数据存储和计算方面有很好的可扩展性和高容错性&#xff0c;因此使用Hive构建的数据仓库也秉承了这些特性。 简单来说&#xff0c;Hive就是在Hadoop上架了一层SQL接口&#xff0c;可以将SQL翻译成MapRedu…

java题目9:100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马两匹驮1担。计算大中小马的数目(HorsesPackGoods9)

每日小语 正是他的意图损坏了他的悟性。——《充足理由律的四重根》 思考 有点鸡兔同笼的感觉嗷&#xff0c; //100匹马驮100担货&#xff0c;大马一匹驮3担&#xff0c;中马一匹驮2担&#xff0c;小马两匹驮1担。计算大中小马的数目&#xff08;public class HorsesPackGoo…

Centos7安装RTL8111网卡驱动

方法一&#xff1a; // 安装pciutils # yum install -y pciutils // 查看pci设备信息 # lspci | grep -i Ethernet 09:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 03) // 上面看到是Re…

使用倒模耳机壳UV树脂胶液制作HIFI耳机隔音降噪耳机壳推荐的材料和工艺流程?

对于使用倒模耳机壳UV树脂胶液制作HIFI耳机隔音降噪耳机壳&#xff0c;以下是一些推荐的材料和工艺流程&#xff1a; 材料&#xff1a; UV树脂胶液&#xff1a;选择适合倒模工艺的UV树脂胶液&#xff0c;要求具有高透明度、良好的流动性和固化性能。模具材料&#xff1a;根据…

RWKV_Pytorch:支持多硬件适配的开源大语言模型推理框架

亲爱的技术探索者们&#xff0c;今天我要向大家隆重推荐一个在开源社区中崭露头角的项目——RWKV_Pytorch。这是一个基于Pytorch的RWKV大语言模型推理框架&#xff0c;它不仅具备高效的原生Pytorch实现&#xff0c;而且还扩展了对多种硬件的适配支持&#xff0c;让模型的部署和…

JUC/多线程 模式(四)

一、同步模式之保护性暂停 即 Guarded Suspension &#xff0c;用在一个线程等待另一个线程的执行结果 产生结果的线程和使用结果的线程是一一对应的&#xff0c;有多少个生产结果的线程就有多少个使用结果的线程。 要点 有一个结果需要从一个线程传递到另一个线程&#xff0…

C#_事件_多线程(基础)

文章目录 事件通过事件使用委托 多线程(基础)进程:线程: 多线程线程生命周期主线程Thread 类中的属性和方法创建线程管理线程销毁线程 事件 事件&#xff08;Event&#xff09;本质上来讲是一种特殊的多播委托&#xff0c;只能从声明它的类中进行调用,基本上说是一个用户操作&…

什么样的人适合学习网络安全?怎么学?_

有很多想要转行网络安全或者选择网络安全专业的人在进行决定之前一定会有的问题&#xff1a;什么样的人适合学习网络安全&#xff1f;我适不适合学习网络安全&#xff1f; 会产生这样的疑惑并不奇怪&#xff0c;毕竟网络安全这个专业在2017年才调整为国家一级学科&#xff0c;…

Pandas操作MultiIndex合并行列的Excel,写入读取以及写入多余行及Index列处理,插入行,修改某个单元格的值,多字段排序

Pandas操作MultiIndex合并行列的excel&#xff0c;写入读取以及写入多余行及Index列处理&#xff0c;多字段排序尽量保持原来的顺序 1. 效果图及问题2. 源码参考 今天是谁写Pandas的 复合索引MultiIndex&#xff0c;写的糊糊涂涂&#xff0c;晕晕乎乎。 是我呀… 记录下&#…

互联网轻量级框架整合之JavaEE基础

不得不解释得几个概念 JavaEE SUN公司提出来的企业版Java开发中间件&#xff0c;主要用于企业级互联网系统的框架搭建&#xff0c;同时因为Java语言优质的平台无关性、可移植性、健壮性、支持多线程和安全性等优势&#xff0c;其迅速成为构建企业互联网平台的主流技术&#x…

【数据结构】树tree

树的遍历 广度遍历Breadth-first traversal Breadth-first traversal is the traversal strategy used in the binary tree.Breadth first traversal, also known as level order traversal is the traversal strategy used in a binary tree. It involves visiting all the …

郭林保大夫——帕金森病明明很早就诊疗了,还是见不到好效果?

郭林保大夫&#xff1a;帕金森是一种常见的神经系统退行性疾病&#xff0c;如果不及时治疗&#xff0c;病情会逐渐加重&#xff0c;导致患者的生活质量严重下降。可能会出现肌肉僵硬、震颤、运动障碍等症状&#xff0c;使患者行动不便&#xff0c;甚至丧失自理能力。此外&#…