make文件基础用法
参照:https://www.jianshu.com/p/0b2a7cb9a469
创建工作目录,包含一下文件
- main.c
- person.c
- b.h
- c.h
/***
c.h
***/
//this is c.h
/***
b.h
***/
//this is b.h
/***
main.c
***/
#include<stdio.h>
//#include"a1.h"
//#include"b.h" int main()
{
printf("The Version 1.1\n");
return ;
}
如果main.c文件中加上注释的头文件会生成对应的b.h.gch文件,此处存疑

1.创建makefile文件:
/***
makefile
***/
app: main.o person.o other.o
gcc -o app main.o person.o other.o
main.o:main.c
gcc -c main.c a.h
person.o:person.c a.h b.h
gcc -c person.c
other.o:person.c b.h
gcc -c person.c -o other.o clean:
rm app main.o person.o other.o
2.定义变量,代替目标文件,简化代码:
objects = main.o person.o other.o
app : $(objects)
gcc -o app $(objects)
main.o : main.c
gcc -c main.c c.h
person.o : person.c c.h b.h
gcc -c person.c
other.o : person.c b.h
gcc -c person.c -o other.o clean :
rm app $(objects)
3.使用makefile自动推导机制,简化指令语句
在编译过程中,哪些类型的文件的编译需要哪些指令是固定的,所以makefile文件可以从依赖关系自动推导出后面要执行的语句
简化如下:
objects = main.o person.o app : $(objects)
gcc -o app $(objects) main.o : main.c
person.o : person.c c.h b.h clean :
rm app $(objects)
只有依赖声明下面没有任何语句,makefile才会自动推导,否则执行指定文件。
注意:这里去掉了other.o,是因为other.o依赖person.c手动生成的other.o,这里的makefile只会生成与依赖文件相同名字的.o文件。

4.如果文件不在一个目录下,需要指定目录,只需要在makefile的第一行添加
VPATH = path1 : path2 :path3
makefile文件会自动按照路径顺序,依次查找文件

如图:
person.c文件在 /home/exbot/wangqinghe/makefileTest
b.h文件在/home/exbot/wangqinghe
c.h 文件在当前目录中2019060601 文件夹下
于是makefile 如下:
VPATH = ./ :/home/exbot/wangqinghe : /home/exbot/wangqinghe/makefileTest CC = gcc objects = main.o person.o app : $(objects)
$(CC) -o app $(objects)
@echo "input information : compile finished"
#@echo "输出信息:编译完成" main.o : main.c person.o : person.c c.h b.h .PHONY : clean clean :
rm app $(objects)
make文件基础用法的更多相关文章
- C# settings 文件基础用法
原文 自定义设置项类型 Serializable 修饰的枚举,可作为设置项类型 [Serializable] public enum DeviceBrand { None = 0, [Descript ...
- Bootstrap fileinput:文件上传插件的基础用法
官网地址:http://plugins.krajee.com/ 官网提供的样例:http://plugins.krajee.com/file-input/demo 基础用法一 导入核心CSS及JS文件 ...
- find命令的基础用法以及按文件修改时间查找文件
一般文件查找方法: find 命令学好是一件很有趣的事情,也可以帮你在查找系统文件的时候事倍功半,还可以与正则表达式结合使用,功能强大,是一个很好的查找工具.可以整体提高你的系统管理能力. 基础用法 ...
- logstash安装与基础用法
若是搭建elk,建议先安装好elasticsearch 来自官网,版本为2.3 wget -c https://download.elastic.co/logstash/logstash/packag ...
- elasticsearch安装与基础用法
来自官网,版本为2.3 注意elasticsearch依赖jdk,2.3依赖jdk7 下载rpm包并安装 wget -c https://download.elastic.co/elasticsear ...
- Smarty基础用法
一.Smarty基础用法: 1.基础用法如下 include './smarty/Smarty.class.php';//引入smarty类 $smarty = new Smarty();//实例化s ...
- 前端自动化测试神器-Katalon的基础用法
前言 最近由于在工作中需要通过Web端的功能进行一次大批量的操作,数据量大概在5000左右,如果手动处理, 完成一条数据的操作用时在20秒左右的话,大概需要4-5个人/天的工作量(假设一天8小时的工作 ...
- Docker 安装和基础用法
理解Docker(1):Docker 安装和基础用法 本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 ...
- Scss基础用法
Scss基础用法 一.注释用法: (1)//comment:该注释只是在.scss源文件中有,编译后的css文件中没有. (2)/! /:重要注释,任何style的css文件中都会有,一般放置css文 ...
随机推荐
- Oracle表的Rowid字段
Rowid 字段类型: Rowid 是一行数据的一个唯一标识. ROWID 是数据的详细地址,通过 rowid,oracle 可以快速的定位某行具体的数据的位置. ROWID 可以分为物理 rowid ...
- P2670 【扫雷游戏】
题面哦~~ lalala~~~ 这题数据并不大,最大不过100*100,所以果断穷举 其实本来我是想边读边做的,但读入是个问题. 主要思路呢,就是读完之后穷举一边,只要是炸弹,就把周围一圈8个加一遍 ...
- C++运算符重载总结(真的很详细了w(゚Д゚)w)
C++运算符重载总结(真的很详细了w(゚Д゚)w) 概述 运算符重载可以使得一些特殊类型参与运算,我是这样理解的. 使用友元形式的运算符重载 //一般形式 class x{ friend 返回类型 o ...
- linux连接Windows系统之项目连接
在桥接模式下 在linux内需要设置 防火墙关闭 在Windows中连接 linux的ip连接 ***项目 在linux中命令行输入setup-->防火墙配置-->空格-->确定-- ...
- java中的重写总结
这个理解了就挺容易的~~ 我就直接贴个程序啦 ,程序里有说明!! 父类: package ParentAndSon; public class Parent extends Object {//4:以 ...
- python 装饰器,生成器,迭代器
装饰器 作用:当我们想要增强原来已有函数的功能,但不想(无法)修改原函数,可以使用装饰器解决 使用: 先写一个装饰器,就是一个函数,该函数接受一个函数作为参数,返回一个闭包,而且闭包中执行传递进来的函 ...
- 特产网站自适应CSS
下面是一个特产网站自适应CSS,这个特产自适应CSS通过屏幕宽度大小来进行适应的,而不是根据UA来判断,就加快了判断的速度,所以速度很快 中国特产站排名还是很好的,特别是手机端 li { list-s ...
- 关于hdfs的一些认知
先从网上copy一些优势点 1.高容错性数据自动保存多个副本.它通过增加副本的形式,提高容错性.某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的,我们不必关心. 2.适合批处理它是 ...
- python 写入JSON中文乱码解决方法
在将一个字典添加入json中时多加入一个参数就可以了 json.dumps(dict(item), ensure_ascii=False) 例子 with open('zh-cn.json','w', ...
- 爬虫之如何找js入口(一)
目标网页:https://m.gojoy.cn/pages/login/ 将我删除i ndex?from=%2Fpages%2Fuser%2Findex 需要工具:chrome和油猴 油猴代码: // ...