Linux编程(6)_makefile
更加详细的makefile教程, https://blog.csdn.net/ruglcc/article/details/7814546
1 make
gcc - 编译器, 按照某种规则编译你的代码
make - linux自带的构建器
- 构建的规则在makefile中
2 makefile文件命名
- makefile
- Makefile
3 makefile中的规则
gcc a.c b.c c.c -o app
这个命令如何转化为makefile中的规则呢
分为三部分: 目标, 依赖, 命令
目标:依赖
(tab缩进)命令
转化-------------------------------------->
app:a.c b.c c.cgcc a.c b.c c.c -o app
makefile中可以有多条规则
执行make
就可执行makefile中的命令
4 makefile的编写
4.1 第一个版本
缺点: 效率低, 修改一个文件, 所有文件会被全部重新编译
4.2 第二个版本
工作原理:
- 检查文件是否存在, 向下搜索下边的规则, 如果有规则是用来生成查找的依赖的, 执行规则中的命令
- 依赖存在, 根据目标和依赖的生成时间的对比, 判断是否进行更新, 原则是目标的时间>依赖的时间, 否则进行更新
缺点: 冗余
4.3 第三个版本
自定义变量: obj=a.o b.o c.o,
obj=10
变量的取值: aa=$(obj)
makefile自带的变量: 大写
CPPFLAGS
CC
自动变量 只能在命令中使用
- $@ : 规则中的目标
- $< : 规则中的第一个依赖
- $^ : 规则中所有的依赖
模式匹配: %.o:%.c
第一次: main.o没有, main.o:main.c
依次进行
可移植性差
4.4 第四个版本
makefile中所有函数都有返回值
查找指定目录下指定类型的文件
wildcard
, 例src=$(wildcard ./*.c)
匹配替换
patsubst
, 例obj=$(patsubst %.c, %.o, $(src))
, 表示用.o去替换src中所有.c的文件, 注意使用百分号%缺点: 不能清理项目
4.5 第五个版本
编写清理项目的规则
# 在makefile中定义
.PHONY:clean # 声明伪目标, 防止被更新
clean:[-]rm $(obj) $(target) [-f]
# - 可选, 表示当前命令执行失败忽略, 继续向下执行
# -f 可选, 表示强制删除
就可以在终端执行make clean
Linux编程(6)_makefile相关推荐
- Linux编程题:信号量同步三进程依次打印若干次ABC
三个进程依次打印ABC..... 思路及大致流程如下: 思路取自这位大哥: Linux编程题:创建3个线程分别打印abc,用信号量进行同步_cleverlemon的博客-CSDN博客 这位大哥写的是线 ...
- linux编程取消wait函数,Linux编程基础之进程等待(wait()函数).pdf
Linux编程基础之进程等待(wait()函数) 编程过程中,有时需要让一个进程等待另一个进程 ,最常见的是父进程等待自己的子进程 ,或者父进程回收自己 的子进程资源包括僵尸进程.这里简单介绍一下系统 ...
- Linux 编程经典书籍推荐
成为一名精通 Linux 程 序设计的高级程序员一直是不少朋友孜孜以求的目标.根据中华英才网统计数据,北京地区 Linux 程序员月薪平均为 Windows 程序员的 1.8 倍.Java 程序员的 ...
- linux的编程命令,linux编程常用命令
学习linux编程最基本的就是要掌握常用的编程命令,下面由学习啦小编为大家整理了linux编程常用命令相关知识,希望大家喜欢! linux编程常用命令1.编译应用程序 make -f makefile ...
- Linux 编程中的API函数和系统调用的关系【转】
转自:http://blog.chinaunix.net/uid-25968088-id-3426027.html 原文地址:Linux 编程中的API函数和系统调用的关系 作者:up哥小号 API: ...
- 学习Unix/Linux编程要学些什么
最近利用空余时间看了一下<Unix/Linux编程实践教程>,原书名为:Understanding Unix/Linux Programming: A Guide to Theory an ...
- Linux编程下open()函数的用法
Linux编程下open()函数的用法 open(打开文件) 相关函数: read,write,fcntl,close,link,stat,umask,unlink,fopen 表头文件 : #i ...
- 嵌入式linux内核oops,Linux编程时遇到Oops提示该如何排查?
各位工程师在Linux下开发程序时,有没有遇到由于系统中存在某些小故障而跳出了"Oops"提示的情况,此时你是如何排查故障?一行行的查看代码吗?其实不用那么复杂,本文将为你介绍一种 ...
- Linux编程获取网络信息总结
Linux下C获取所有可用网卡信息 在Linux下开发网络程序时,经常会遇到需要取本地网络接口名.IP.广播地址 .子网掩码或者MAC地址等信息的需求,最常见的办法是配合宏SIOCGIFHWADDR. ...
最新文章
- [MySQL Reference Manual] 7 备份和恢复
- PDF与doc格式互换
- php 时间函数详解,PHP时间函数date()详解
- lda主题词评论python_Python之酒店评论主题提取LDA主题模型
- 编译py-faster-rcnn全过程
- windows下编译firefox
- Linux下搭建 kafka集群 + zookeeper集群部署 安装、启动、停止
- Vue之路由push
- c语言如何引用一维数组,C语言一维数组的定义和引用
- Onenote 安装GEM 插件 失败~修复
- 秩和比综合评价法(RSR)详解及Python实现和应用
- Charles 破解版安装
- 如何用PS缩小图片而清晰度不变?
- iomega ix2 Android,Lenovo Iomega ix2系统安装
- Vuex--mapState, mapGetters, mapActions, mapMutations--使用/教程/实例
- 解决php加载慢的一个办法
- B2C购物车功能应该怎么设计,以及我的设计构思分析
- 《赵成的运维体系管理课》学习笔记(3)——云计算时代的运维实践
- linux中的manifest的作用,Manifest用途
- 以下哪款工具不能编译c语言,哪款C语言编译器(IDE)适合初学者?
热门文章
- 使用Github官方提供的gitignore过滤Git提交的文件
- php用魔术方法__call实现类函数重载
- [转载]Dynamic Database Switching in Rails - How to do it
- sql server数据表转换成xml
- 多线程编程(1) - 认识等待函数 WaitForSingleObject
- 白话设计模式--结构型模式之 适配器模式(Adapter)
- 原生node写一个静态资源服务器
- 内核开发知识第二讲,编写Kerner 程序中注意的问题.
- [BUAA OO]第三次博客作业
- Thinking in Java Reading Note(5.初始化与清理)