Makefile入门实例

2024-09-01 02:32
文章标签 入门 实例 makefile

本文主要是介绍Makefile入门实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Makefile概述

makefile文件是用来描述整个工程的编译连接规则的,主要描述哪些源文件需要编译以及如何编译,如何生成我们想要的可执行文件。一旦Makefile文件写好,只需要一个make命令,整个工程完全自动编译,极大提高了软件的开发效率。

Makefile规则

Makefile主要有三大规则:目标、依赖条件和命令

目标:是我们要生成的文件

依赖:是要生成的文件是通过哪些文件来生成的

命令:是如何将依赖中的文件生成目标文件

格式如下:

目标:依赖条件

tab缩进)命令

Makefile简单实例

test:main.c add.c sub.c(.c文件所在路径和Makefile是同一个路径,如果不是同一个目录需要显示指定.c文件的路径)gcc main.c add.c sub.c -o test

其中test为目标,依赖条件是main.c、add.c和sub.c,命令是gcc main.c add.c -o test。

意思就是test是由main.c、add.c、sub.c文件通过gcc命令来生成的

Makefile实例进阶1

上面方式生成的test效率会比较低,因为只要任何一个依赖文件进行修改都需要重新编译所有文件。为了让只编译修改的文件,可以将上述的Makefile修改成如下形式

test:main.o add.o sub.ogcc main.o add.o sub.o -o testmain.o:main.cgcc -c main.cadd.o:add.cgcc -c add.csub.o:sub.cgcc -c sub.c

在上面的Makefile中,test、main.o、add.o、sub.o都是目标文件,在有多个目标文件的情况下,第一个目标文件为我们最终的目标文件,下面的其他所有目标文件都是用来生成第一个目标文件的

上面的实例中,test不再由.c文件来生成了,而是由.o文件来生成。当其中一个.c文件修改了,只会执行对应的命令生成.o文件,不需要所有的文件都重新编译。例如:mian.c修改了,只会执行gcc -c main.c来生成main.c文件,add.o和sub.o不需要重新编译生成。

由上面生成规则可以知道,Makefile只有检查到依赖项的生成时间比目标的时间晚,才会重新编译

Makefile实例进阶2

如果依赖文件很多,那按照上面的编写方法来写Makefile文件效率会很低,而且会写的很长。所以引入Makefile提供的变量来将上面的内容写的更加简洁一些。

obj=main.o add.o sub.o
target=test
$(target):$(obj)gcc $(obj) -o $(target)%.o:%.c
gcc -c $< -o $@

obj为自定义的变量,变量值为main.o add.o sub.o

target也是自定义的变量,变量值为test

Makefile中取变量值的方式是通过$()来取的

%.o:%.c类似于for循环,遍历target的依赖条件obj的时候,会逐个匹配的,%号是正则匹配的。例如先找到main.o时,%.o就是main.o,%.c就是mian.c,然后“gcc -c $< -o $@”就表示由main.c生成main.o.

其中 &lt; 和 &lt;和 <@是Makefile中自动的变量,含义如下:

$<:表示规则中的一个依赖
$@:表示规则中的目标
$^:表示规则中的所有依赖

这篇关于Makefile入门实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125694

相关文章

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多