makefile

1、makefile规则

基本格式:

    target ... : prerequisites ...
            command
            ...
            ...

1)target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)

2)prerequisites就是,要生成那个target所需要的文件或是目标。

3)command也就是make需要执行的命令。(任意的Shell命令)

2、示例

#hello为最终生成的可执行文件

#其依赖于factorial.o hello.o两个目标文件

#cc -o ***为gcc命令,生成可执行文件

hello : factorial.o hello.o
    cc -o hello factorial.o hello.o

#factorial.o依赖于factorial.c factorial.h两个源文件

#cc -c *** 为gcc命令:生成目标文件
factorial.o : factorial.c factorial.h
    cc -c factorial.c

#hello.o依赖于hello.c factorial.h两个源文件
hello.o : hello.c factorial.h
    cc -c hello.c

#clean为命令集,用于清理。

#在这里清理的是hello.o、factorial.o、hello文件
clean :
    rm hello.o factorial.o hello

3、使用

makefile写完后,存盘,保存名为makefile。

进入此文件目录下,执行命令make。

makefile程序会根据makefile文件最终生成hello可执行文件。

可使用make clean命令清理中间文件和可执行文件。

4、变量的使用

在makefile中可以声明变量,类似于c语言中的宏。上述makefile可以写成如下形式:

#定义hello_parts变量

hello_parts = factorial.o hello.o

hello : $(hello_parts)

    cc –o hello $(hello_parts)

...

clean :
    rm $(hello_parts) hello

5、makefile的自动推导机制

在makefile中,存在如下机制:

如果目标文件为hello.o,则makefile内部会自动寻找hello.h,hello.c,并且自动执行cc –c 命令。

例如以上的makefile可以修改为:

hello_parts = factorial.o hello.o

#factorial模块的相关生成语句被完全省略掉,因为可以自动推导

#hello.o的生成也被部分省略,因为可以自动推导找出hello.c/hello.h

hello : $(hello_parts)

    cc –o hello $(hello_parts)

hello.o : factorial.h

clean :
    rm $(hello_parts) hello

6、清空目标文件的规则

1)将clean命令集写在makefile的最后

2)按如下形式书写:

.PHONY : clean
clean :
    -rm edit $(objects)

其中-rm表示无论遇到什么文件出现问题,继续执行。

你可能感兴趣的:(object,shell,command,gcc,语言,makefile)