Makefile 的编写

简介: Makefile 的编写
今天学习一下Make file的编写,make工具是用于多文件的编译的汇编工具。好处在于,当使用make编译过一次程序后,会记录每一个文件的时间戳,当修改某些文件后,再次使用make工具编译时,他只会编译修改过时间戳的文件这样相比gcc *.c节省了大量的时间,另外,make可以有选择性的对指定的文件进行编译。
make工具需要自己去写,一般文件的名称为Makefile
**编写Makefile文件**


第一版本:


#目标文件:依赖文件
#tab gcc具体的编译流程
main:main.o doublelist.o mymath.o    
  gcc main.o doublelist.o mymath.o -o main
main.o:main.c    
  gcc -c main.c -o main.o
doublelist.o:doublelist.c doublelist.h    
  gcc -c doublelist.c -o doublelist.o
mymath.o:mymath.c    
  gcc -c mymath.c -o mymath.o


第二版本:


CC=gcc
#CC=arm-linux-gcc
OBJ=main
FILE=main.o doublelist.o mymath.o
#附加编译选项#-Wall:显示所有警告
#-g:用于gdb调试
#-O2:优化最终生成的可执行文件
#-c:汇编阶段所需
CFLAGS=-Wall -g -O2 -c
$(OBJ):$(FILE)    
  $(CC) $(FILE) -o $(OBJ)
main.o:main.c    
  $(CC) $(CFLAGS) main.c -o main.o
doublelist.o:doublelist.c    
  $(CC) $(CFLAGS) doublelist.c -o doublelist.o
mymath.o:mymath.c    
  $(CC) $(CFLAGS) mymath.c -o mymath.o
clean:    
  $(RM) $(FILE) $(OBJ)


第三版本:


$@ 目标名

$< 依赖文件列表中的第一个文件

$^ 依赖文件列表中除去重复文件的部分


CC=gcc
#CC=arm-linux-gcc
OBJ=main
FILE=main.o doublelist.o mymath.o
#附加编译选项
#-Wall:显示所有警告
#-g:用于gdb调试
#-O2:优化最终生成的可执行文件
#-c:汇编阶段所需
CFLAGS=-Wall -g -O2 -c
$(OBJ):$(FILE)    
  $(CC) $^ -o $@
main.o:main.c    
  $(CC) $(CFLAGS) $< -o $@
doublelist.o:doublelist.c    
  $(CC) $(CFLAGS) $< -o $@
mymath.o:mymath.c    
  $(CC) $(CFLAGS) $< -o $@
clean:    
  $(RM) $(FILE) $(OBJ)


第四版本:


CC=gcc
OBJ=main
FILE=main.o doublelist.o mymath.o
CFLAGS=-Wall -g -O2 -c
$(OBJ):$(FILE)    
  $(CC) $^ -o $@
%*.o:%*.c    
  $(CC) $(CFLAGS) $< -o $@
clean:    
  $(RM) $(FILE) $(OBJ)


使用:

在终端直接敲:make

如果要删除.o和可执行文件:make clean

相关文章
|
6月前
|
Shell Linux C++
Makefile编译实战
Makefile编译实战
83 0
|
C语言
Makefile教程(Makefile的结构)
Makefile教程(Makefile的结构)
102 0
|
3月前
|
Shell
makefile编写与使用
makefile编写与使用
82 1
|
6月前
|
编译器 测试技术
如何编写自己的Makefile(1)
如何编写自己的Makefile(1)
28 1
|
11月前
|
Shell
Makefile学习2
Makefile学习2
|
Shell
如何使用makefile
如何使用makefile
|
IDE 编译器 程序员
编写Makefile
编写Makefile
59 0
|
IDE Linux Shell
【Makefile】简单的Makefile编写
【Makefile】简单的Makefile编写
|
Java Linux 程序员
玩转Makefile | 一文入门Makefile
玩转Makefile | 一文入门Makefile
239 0
玩转Makefile | 一文入门Makefile