1.10~1.12 Makefile

简介: 1.10~1.12 Makefile

01 什么是Makefile



02 Makefile规则



版本一


app:sub.c add.c mult.c div.c main.c
  gcc sub.c add.c mult.c div.c main.c -o app


版本二


app:sub.o add.o mult.o div.o main.o
  gcc sub.o add.o mult.o div.o main.o -o app
sub.o:sub.c
  gcc -c sub.c -o sub.o
add.o:add.c
  gcc -c add.c -o add.o
mult.o:mult.c
  gcc -c mult.c -o mult.o
div.o:div.c
  gcc -c div.c -o div.o
main.o:main.c
  gcc -c main.c -o main.o


第二个版本编写更麻烦,但是更新依赖文件的时候,不需要全部重新编译


03 工作原理



04 变量



#定义变量
src=sub.o add.o mult.o div.o main.o
target=app
$(target):$(src)
  $(CC) $(src) -o $(target)
sub.o:sub.c
  gcc -c sub.c -o sub.o
add.o:add.c
  gcc -c add.c -o add.o
mult.o:mult.c
  gcc -c mult.c -o mult.o
div.o:div.c
  gcc -c div.c -o div.o
main.o:main.c
  gcc -c main.c -o main.o


有什么用:简化代码


05 模式匹配



再次优化


#定义变量
src=sub.o add.o mult.o div.o main.o
target=app
$(target):$(src)
  $(CC) $(src) -o $(target)
%.o:%.c
  $(CC) -c $< -o $@


06 函数




#定义变量
# add sub.o add.o mult.o div.o main.o
src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target):$(objs)
  $(CC) $(objs) -o $(target)
%.o:%.c
  $(CC) -c $< -o $@


#定义变量
# add sub.o add.o mult.o div.o main.o
src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target):$(objs)
  $(CC) $(objs) -o $(target)
%.o:%.c
  $(CC) -c $< -o $@
#删除.o中间文件
.PHONY:clean #指定不会生成文件
clean:
  rm $(objs) -f


相关文章
|
1月前
|
存储 编译器 C++
Makefile
Makefile
12 0
|
3月前
|
IDE Shell Linux
013.Makefile
Makefiel 编写 我们之前其实已经写过一些makefile了,只是没有具体介绍,本篇博客就详细的介绍一下Makefile。
30 0
|
Linux C语言 编译器
makefile 中 $@ $^ % 2015-04-11 18:02:36
来自博客: http://blog.csdn.net/kesaihao862/article/details/7332528  这篇文章介绍在LINUX下进行C语言编程所需要的基础知识。
1273 0
|
C语言
makefile中伪目标的理解
1. 我们知道Makefile中的语法是这样: target ... : prerequisites ... command … …   2. 假如编译两个文件可以这么写: a.o:a.c  gcc -c a.c b.o:b.c  gcc -c b.c Test: a.o b.o   gcc -o Test a.o b.oclean:  rm *.o 我们可以单独这么运行:make a.o或者make b.o或者make clean注意上面三个的区别。
1183 0
|
Shell C语言 vr&ar
|
C++ 编译器 C语言
CFLAGS,CPPFLAGS,CXXFLAGS in Makefile
CC 与 CXX:      这是 C 与 C++ 编译器命令。默认值一般是 “gcc” 与 “g++”。 CPPFLAGS will be given to the C preprocessor     这是用于预处理阶段的选项。
1810 0
|
Linux C语言 编译器
makefile 中 $@ $^ %< 使用【转】
转自:http://blog.csdn.net/kesaihao862/article/details/7332528 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识。在这篇文章当中,我们将会学到以下内容:源程序编译Makefile的编写程序库的链接程序的调试头文件和系统求助1.源程序的编译在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器。
869 0