现在的位置: 首页 > 综合 > 正文

makefile的编写

2013年10月20日 ⁄ 综合 ⁄ 共 1093字 ⁄ 字号 评论关闭

    makefile 描述了整个工程的编译,链接过程。我们知道生成可执行文件的过程为  源文件--->.o文件-->可执行文件。源文件可能有多个文件,对应生成多个对象文件(。o文件),要生成可执行文件需要将这些对象文件进行链接。以下为一个makefile文件:

hello: main.o func1.o func2.o
          gcc main.o func1.o func2.o -o hello
main.o : main.c
          gcc –c main.c
func1.o : func1.c
         gcc –c func1.c
func2.o : func2.c
        gcc –c func2.c
.PHONY : clean
clean :
        rm –f hello main.o func1.o func2.o

makefile的规制为:

targets:prerequisites

            command

目标:依赖

            命令

     第一行和第二行的代码对应生成 最终目标hello,怎么生成hello呢,对应的依赖为几个目标文件main.o,func1.o,func2.o。使用的命令为gcc main.o func1.o func2.o -o hello

注意,命令这行需要以“TAB”键开始,即前面的空白不是按空格键形成的。后面几行代码对应生成。o文件的代码。

Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)。

.PHONY : clean
clean :
rm –f hello main.o func1.o func2.o
“.PHONY” 将“clean”目标声明为伪目标

     写完makefile后使用make命令即可完成编译和链接工作。make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:
make –f 文件名

当执行上面的makefile程序时我们发现目标文件。o并没有被删除掉,为什么呢?因为直接使用make命令只生成了第一个目标,而伪目标clean并没有执行。只要执行make clean 命令就能执行makefile的clean目标。

    思考:如果要为hello目标添加一个依赖,如:func3.o,该如何修改?
    答案1:
hello: main.o func1.o func2.o func3.o
gcc main.o func1.o func2.o func3.o -o hello
   答案2:
obj=main.o func1.o func2.o func3.o
hello: $(obj)
gcc $(obj) -o hello

   通过变量的方法来更改相关设定

抱歉!评论已关闭.