关于make file(1)

1、用于生产目标文件的自动化执行过程;基本过程是确定各源文件于目标文件间的依赖关系:

       目标文件:依赖的源文件列表

                    执行的命令

        基本例子:

        game: main.o a.o b.o

                    cc -o game main.o a.o b.o

        main.o: main.h x.h z.h

                    cc -c main.c

        a.o: a.h x.h y.h

                    cc -c a.c 

        b.o: b.h x.h y.h

                    cc -c b.c

        执行命令行一定要用Tab进行缩进开头

2、优化make file

1)使用变量对源文件进行优化:(方便在一处即可维护源文件的变更)

    如定义:objs = main.o a.o b.o 上例可优化为:

game: $(objs)

        cc -o game $(objs)

main.o: main.h x.h z.h

        cc -c main.c

a.o: a.h x.h y.h

        cc -c a.c

b.o: b.h x.h y.h

         cc -c b.c

  2)make的自动推导功能可以简化makefile的编写:

只要make看到一个[.o]文件,它就会自动推导把[.h]文件加在依赖关系中,也会自动推导执行命令cc -c [.c]

 3)深入优化格式可为:

game: $(objs)

        cc -o game $(objs) 

$(objs): x.h

main.o: z.h

a.o b.o: x.h y.h

4)通配符?~*


3、好习惯:

.PHONY: clean        #“.PHONY”表示,clean是个伪目标文件

clean:

        rm game $(objs)

4、.PHONY用于跳过隐含规则搜索改善makefile的执行性能;也用于解决不产生实际目标文件虚lable的问题:如clean,并不是一个实际要生产的目标文件,在该目录下如果存在一个clean的文件,没有.phony指定则该目标就永远不执行的问题。

你可能感兴趣的:(关于make file(1))