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

#Linux(make工具和makefile文件以及makefile语法)

(一)发行版:Ubuntu16.04.7


(二)记录:

(1)make为编译辅助工具,解决用命令编译工程非常繁琐的问题

(2)在终端键入make即可调用make工具(在当前目录寻找makefile文件)

(3)makefile是描述整个工程编译和链接的文件

(4)makefile文件必须为makefile或者Makefile

(5)make及makefile使用

a.创建一个源文件(编写了程序)并且创建一个makefile文件

b.在makefile文件中写入规则,保存退出

 c.键入make命令编译


(三)命令:

Make语法上:

目标:依赖

[Tab]命令

如:

/**整个编译**/all:gcc hello.c -o hello/**部分编译**/hello.o:hello.cgcc -c hello.c -o hello.o/**部分编译**/hello:hello.ogcc hello.o -o hello

 (1)示例:

all:hello.ogcc hello.o -o hellohello.o:hello.cgcc -c hello.c -o hello.o

 

make + 文件名单独编译某一个文件,但是如果编译的文件不存在依赖其他编译命令生成,那么就会先编译他所依赖的文件,形成联动编译。如果只键入make那么就会默认编译第一个规则

(2)编译完成之后会产生一些中间文件如.o文件,也可以在makefile中进行规则定义删除

all:hello.ogcc hello.o -o hellohello.o:hello.cgcc -c hello.c -o hello.o//删除所有.o文件以及hello可执行文件
clean:rm -rf *.o hello

 (3)如果vim编辑器无法键入[Tab]

(4)makefile所在文件夹不能有与目标文件名相同的文件

如目标编译hello,该目录下就不能有名为hello的文件,否则会报错make :'hello' is up to date.为了解决文件可能同名的问题引入“伪目标”的概念 ,只需加入".PHONY:目标",如将clean改为伪目标。

all:hello.ogcc hello.o -o hellohello.o:hello.cgcc -c hello.c -o hello.o.PHONY:clean
clean:rm -rf *.o hello

(5)变量赋值:

:=      立刻赋值

=          延迟赋值

?=      如果前面没有赋值则在这里赋值,如果前面赋值了则这里不赋值

+=       追加赋值

$(变量1)    引用变量1

(另一种追加方式 aaa\bbb\ccc) 

(6)makefile文件中的注释为“#

(7)自动化变量:

$@        表示所有目标

$<          表示第一个依赖文件,如果依赖模式是%,那么它就表示一系列文件。(%通配符类似*)

$            表示所有依赖

 Make语法下:

(1)wildcard函数--------------------展开指定目录

格式     $(wildcard pan)

此处echo前面加上@即可不打印echo,只打印下面的内容 

(2)notdir-----------------------------去掉路径

格式     $(notdir $(var))

(3)dir---------------------------------取出目录

格式      $(dir  name)

(4)patsubst--------------------------替换文件后缀

格式        $(patsubst 原文件,目标文件,文件列表)

替代      $(文件列表:原文件=目标文件)

使用这个函数并没有改变原文件,一般配合其他函数使用

(5)foreach        把参数list中的单词逐一取出放到参数var所指定的变量中,然后再执行<text>所包含的表达式,每一次<text>会返回一个字符串

格式:$(foreach <var>,<list>,<text>)

相关文章:

  • spark: 从pulsar中读取数据
  • tcpdump 抓包
  • 基于STELLA系统动态模拟技术及在农业、生态及环境科学中的应用教程
  • WINDOWS设置代理链chain
  • 一文整合工厂模式、模板模式、策略模式
  • 什么是通配符SSL证书?
  • Webgl学习系列-认识Webgl
  • 一、TLE9471 - SBC Mode切换 + VCC2 开关
  • 百度谷歌301强引蜘蛛池效果怎么样
  • 项目中配置多个阿里巴巴矢量图库方案
  • SQL-CRUD-1
  • Available platform plugins are: linuxfb, minimal, offscreen, vnc.
  • Centos7.9备份mysql数据库
  • 【YOLOv5改进系列(5)】高效涨点----添加密集小目标检测NWD方法
  • 【Java程序设计】【C00376】基于(JavaWeb)Springboot的社区帮扶对象管理系统(有论文)
  • 【Leetcode】104. 二叉树的最大深度
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • docker-consul
  • extract-text-webpack-plugin用法
  • iOS 系统授权开发
  • leetcode98. Validate Binary Search Tree
  • mockjs让前端开发独立于后端
  • mongodb--安装和初步使用教程
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • PermissionScope Swift4 兼容问题
  • 机器学习 vs. 深度学习
  • 如何利用MongoDB打造TOP榜小程序
  • 微信支付JSAPI,实测!终极方案
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 计算机视觉入门
  • #pragma once与条件编译
  • (12)Hive调优——count distinct去重优化
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (k8s中)docker netty OOM问题记录
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (动态规划)5. 最长回文子串 java解决
  • (翻译)terry crowley: 写给程序员
  • (分类)KNN算法- 参数调优
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (一)80c52学习之旅-起始篇
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net core使用ef 6
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET上SQLite的连接
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • @ConfigurationProperties注解对数据的自动封装
  • [20170713] 无法访问SQL Server