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

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解