make文件基础用法
2024-10-06 12:28:34
参照: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)
最新文章
- HTML 学习笔记 CSS样式(外边框 外边框合并)
- 设计模式之Builder (创建者模式)的一些个人理解(转)
- window--窗口
- 转:strcat与strcpy与strcmp与strlen
- 华为 1.static有什么用途?(请至少说明两种)
- [Mac]Mac中显示资源库文件夹
- UITextfield设置Placeholder颜色 控件 内边距、自适应高度
- 转载Spring IntrospectorCleanupListener
- Eclipse指定JDK版本 Failed to load the JNI shared JVM.dll
- ASP.NET 导出EXCEL文件处理多对应排列的
- SQL强化(二) 在Oracle 中写代码
- PyTorch官方中文文档:torch.optim
- Linux下jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案
- Python爬虫-pyspider框架的使用
- .net 委托多线程 实时更新界面
- 手动部署 kubernetes HA 集群
- java 判断元素是否在数组内
- Js全等和等于
- Ubuntu16.04首次root登录设置
- 使用 jQuery 调用 ASP.NET AJAX Page Method