参照: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)

最新文章

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

热门文章

  1. Maven添加镜像仓库、更改本地仓库位置
  2. 从入门到自闭之Python while如何使用
  3. Eslint报错整理与解决方法
  4. The Party and Sweets CodeForces - 1159C (拓排)
  5. webAapi
  6. sql server isnull函数
  7. 三剑客-awk(简写)
  8. Spring的基本应用(1):依赖以及控制反转
  9. 基于Websocket的websocketd
  10. N4_75条语法