黑马《linux基础编程》学习笔记(从51到55)

五十一. makefile的工作原理

相比较于五十中提到的第一种方法的弊端,这里提出改进的方法,首先是makefile文件的写法

然后是执行内容

[root@VM_0_15_centos Makefile]# ls
add.c  div.c  head.h  main.c  makefile  mul.c  sub.c
[root@VM_0_15_centos Makefile]# vim makefile

[root@VM_0_15_centos Makefile]# make
gcc main.c -c
gcc add.c -c
gcc sub.c -c
gcc mul.c -c
gcc main.o add.o sub.o mul.o -o app

[root@VM_0_15_centos Makefile]# ls
add.c  add.o  app  div.c  head.h  main.c  main.o  makefile  mul.c  mul.o  sub.c  sub.o
[root@VM_0_15_centos Makefile]# ./app
sum = 26
[root@VM_0_15_centos Makefile]# rm app
[root@VM_0_15_centos Makefile]# ls
add.c  add.o  div.c  head.h  main.c  main.o  makefile  mul.c  mul.o  sub.c  sub.o

//显然在修改了add.c之后,我们再次make的时候,只有add.o和app对应的,被重新执行。
[root@VM_0_15_centos Makefile]# vi add.c
[root@VM_0_15_centos Makefile]# make
gcc add.c -c
gcc main.o add.o sub.o mul.o -o app

 五十二. makefile中的变量

 学到了这里之后,我们现在对之前比较冗余的makefile进行修改

改成这个后,使用make,出现app,仍然可以正常运行。 

五十三. 自动变量和模式规则

 上一节的makefile也可以进一步改写成

 五十四. makefile中的函数

 

 五十五. makefile中添加项目清理功能

现在我们先学习,当makefile中有多个目标时,如何只make指定目标

先修改makefile,然后敲入make hello

  1 src = $(wildcard ./*.c)
  2 obj = $(patsubst %.c, %.o, $(src))
  3 target = app
  4
  5 $(target):$(obj)
  6     gcc $(obj) -o $(target)
  7
  8 %.o:%.c
  9     gcc -c $^ -o $@
 10
 11 hello:
 12     echo "hello,makefile of hello"

 明白这一点后,再在makefile中加入clean部分

  1 src = $(wildcard ./*.c)
  2 obj = $(patsubst %.c, %.o, $(src))
  3 target = app
  4
  5 $(target):$(obj)
  6     gcc $(obj) -o $(target)
  7
  8 %.o:%.c
  9     gcc -c $^ -o $@
 10
 11 hello:
 12     echo "hello,makefile of hello"
 13
 14 clean:
 15     rm $(obj) $(target) -f

先make,再make clean

[root@VM_0_15_centos Makefile]# ls
add.c  div.c  head.h  main.c  makefile  mul.c  sub.c
[root@VM_0_15_centos Makefile]# make
gcc -c mul.c -o mul.o
gcc -c main.c -o main.o
gcc -c add.c -o add.o
gcc -c div.c -o div.o
gcc -c sub.c -o sub.o
gcc  ./mul.o  ./main.o  ./add.o  ./div.o  ./sub.o -o app
[root@VM_0_15_centos Makefile]# ls
add.c  app    div.o   main.c  makefile  mul.o  sub.o
add.o  div.c  head.h  main.o  mul.c     sub.c
[root@VM_0_15_centos Makefile]# ./app
sum = 26


[root@VM_0_15_centos Makefile]# make clean
rm  ./mul.o  ./main.o  ./add.o  ./div.o  ./sub.o app -f
[root@VM_0_15_centos Makefile]# ls
add.c  div.c  head.h  main.c  makefile  mul.c  sub.c

接下来涉及到“伪目标”,

  1 src = $(wildcard ./*.c)
  2 obj = $(patsubst %.c, %.o, $(src))
  3 target = app
  4
  5 $(target):$(obj)
  6     gcc $(obj) -o $(target)
  7
  8 %.o:%.c
  9     gcc -c $^ -o $@
 10
 11 hello:
 12     echo "hello,makefile of hello"
 13
 14 .PHONY:clean
 15 clean:
 16     -mkdir /abc
 17     -rm $(obj) $(target) -f

猜你喜欢

转载自blog.csdn.net/garrulousabyss/article/details/83809787