Linux系列之makefile的简单入门

什么是makefile呢?
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。
接下来用几个简单的小例子为大家介绍简单的makefile使用
例子1:

main: main.c
     gcc main.c -o main

其中,main为目标生成文件,main.c为依赖文件
例子2:

main: main.c hello.o
     gcc main.c hello.o -o main
hello.o: hello.c
     gcc -c hello.c
   
clean :
     rm -fr *.o main

其中,gcc min.c : gcc编译器会对源文件min.c进行预处理, 编译, 以及链接, 最后生成可执行文件, 默认为a.out
gcc -c min.c: gcc编译器会对源文件min.c进行预处理, 编译, 不进行链接, 最后生成的是object file (目标文件), 此处为min.o, 这属于编译过程的中间阶段, 再经过链接, 才能最终生成可执行文件.
注意:makefile都是从上往下看依赖条件进行的,比如目标文件main依赖的是main.c和
hello.o,然后hello.o依赖hello.c,执行gcc -c hello.c后生成hello.o。
例子3:



CC = gcc
CFLAGS = -c -Wall -g
OBJS = main.c hello.o helloo.o
all: main
main: $(OBJS)
     $(CC)  $^ -o $@
%.o: %.c
     $(CC) $^  $(CFLAGS) -o $@ 
clean :
     rm -fr *.o main

说明:执行make clean命令,可删除当前目录下所有的.o文件以及main
CC、CFLAGS、OBJS相当于定义一个变量名来代替后面的变量值
all表示可执行所有目标文件

all : hello another
 
hello : hello.c
    gcc -o $@ $<
 
another : another.c
    gcc -o $@ $<

$^ = 上一句依赖关系当中被依赖的文件
$@=目标名
% =通配符(代表相同的名字)

好了,今天的分享就到此为止了,谢谢观看!

posted @ 2020-04-08 22:13  程序猿小佳  阅读(172)  评论(0)    收藏  举报