当前位置: 首页 > news >正文

linux中的makefile

(码字不易,关注一下吧w~~w)

makefile文件是用来管理项目文件,通过执行make命令,make就会解析并执行makefile文件。

命名:makefile或者Makefile

规则:

目标文件:依赖文件

(tab)命令

第一个版本:

这是新建makefile文件的内容:

依赖文件不用写.h头文件

接下来执行make ,就会生成main文件

缺点:改其中一个文件,就得重新编译

第二个版本:

检查规则:

要想生成目标文件,先检查依赖条件是否都存在:

  若都存在,则比较目标时间和以依赖时间,如果依赖时间比目标时间新,则重新生成目标;否则不重新生成;

  若不存在,则往下找有没有生成依赖的规则,有则生成,没有就报错。

这是makefile文件的内容:

执行make命令后:

第二个版本可以消除第一个版本的缺点

原因:

假设add.c更新最新修改时间时

add.o(依赖文件)的时间比add.c(目标文件)的时间晚,就会执行gcc -c add.o add.c命令

紧接着main(依赖文件)的时间比add.o(目标文件)的时间晚,就会执行gcc -o main main.o add.o jian.o命令

第三个版本:

 变量:

         自定义变量:v=hello ,下文中$(v)=hello

          自带变量:CC(gcc),CPPFLAGS( -I  -->头文件所在目录),LDFLAGS(链接器选项  -L -l),CFLAGS(c编译器选项 -wall -g -c)

          (只能用在命令中)自动变量:$@  -->表示规则中的目标

                            $<    -->表示规则中的第一个条件(依赖文件)

                            $^    -->表示规则中所有条件(重复项消除重复项) 

           模式规则:

                           %.o:%.c   -->.o文件依赖与.c文件   %必须一样

通过使用变量的makefile:

 执行make:

第四个版本 :

函数:

        1:wildcard 查找指定目录下指定类型的文件

        src=$(wildcard *.c)//找到当前目录下.c文件,赋值给src

        2:patsubst 匹配替换

        obj=$(patsubst %.c,%.o,$(src))//把src变量所有.c文件替换为.o文件

执行make:

第五个版本: 

 .PHONY:clean

把clean设为为伪命令,clean就不需要依赖了。

第一个出现的目标为终极目标。

make命令就是实现终极目标

make clean 实现 clean

使用-f可以指定makefile名字

make -f mainmak clean 

相关文章:

  • -1- Python环境安装
  • C++模版初阶
  • 如何在 Golang 中使用 crypto/ed25519 进行数字签名和验证
  • 大数据信用报告查询费用一般要多少钱?
  • 幻兽帕鲁能在Mac上运行吗?幻兽帕鲁Palworld新手攻略
  • 【ArcGIS微课1000例】0100:ArcGIS for CAD软件下载与安装(附安装包)
  • 【数据分享】1929-2023年全球站点的逐月降雪深度数据(Shp\Excel\免费获取)
  • golang网络编程day4
  • Node需要了解的知识
  • Maven高级知识——分模块开发、继承与聚合
  • Ps:自动对齐图层
  • STM32F407移植OpenHarmony笔记8
  • springboot中使用Elasticsearch
  • 物流自动化移动机器人|HEGERLS三维智能四向穿梭车助力优化企业供应链
  • go语言-字符串处理的常用函数
  • Android Volley源码解析
  • cookie和session
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • java中的hashCode
  • Spring核心 Bean的高级装配
  • 百度小程序遇到的问题
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • elasticsearch-head插件安装
  • Java总结 - String - 这篇请使劲喷我
  • k8s使用glusterfs实现动态持久化存储
  • 树莓派用上kodexplorer也能玩成私有网盘
  • 整理一些计算机基础知识!
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #NOIP 2014# day.2 T2 寻找道路
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (04)odoo视图操作
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (8)STL算法之替换
  • (C语言)二分查找 超详细
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十五)使用Nexus创建Maven私服
  • (小白学Java)Java简介和基本配置
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)Sublime Text3配置Lua运行环境
  • .chm格式文件如何阅读
  • .Net 中Partitioner static与dynamic的性能对比
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET中两种OCR方式对比
  • @ResponseBody
  • @RunWith注解作用
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [ActionScript][AS3]小小笔记