码迷,mamicode.com
首页 > 其他好文 > 详细

makefile简单入门(二)

时间:2017-06-08 00:08:53      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:简单   makefile   search   开始   gcc   问题   语言   自己   工程   

继续前面的一篇文章

objects = main.o add.o sub.o
test:$(objects)
     gcc -o test $(objects)
main.o:main.c
     gcc -c main.c
add.o:add.c add.h
     gcc -c add.c
sub.o:sub.c sub.h
     gcc -c sub.c
.PHONY:clean
clean:
     rm test $(objects)

其中objects是makefile中的变量,如果我们这里不用变量,那么这个makefile文件会写成什么样?

test:main.o add.o sub.o
    gcc -o test main.o add.o sub.o
main.o:main.c
    gcc -c main.c
add.o:add.c add.h
    gcc -c add.c
sub.o:sub.h sub.c
    gcc -c sub.c
.PHONY:clean
clean:
    rm test $(objects)

不使用变量的时候,main.o add.o sub.o会被写多次,如果添加或者删除一个目标文件的时候,就需要在两个地方修改了。

在makefile中我们可以使用变量。makefile的变量也就是一个字符串,理解成C语言中的宏可能会更好。

比如,我们声明一个变量,叫objects, OBJECTS, objs, OBJS, obj, 或是 OBJ,反正不管什么啦,只要能够表示obj文件就行了。我们在makefile一开始就这样定义:

    objects = main.o add.o sub.o

于是,我们就可以很方便地在我们的makefile中以“$(objects)”的方式来使用这个变量了。如果一行写不下,可以像C语言那样,添加一个换行连字符。

比如 objects = main.o kbd.o command.o display.o \

             insert.o search.o files.o utils.o

让make自动推导

 

GNU的make很强大,它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去在每一个[.o]文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令。

 

只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个whatever.o,那么whatever.c,就会是whatever.o的依赖文件。

并且 cc -c whatever.c 也会被推导出来,于是,我们的makefile再也不用写得这么复杂。我们的是新的makefile写成如下:

objects = main.o add.o sub.o
test:$(objects)
    gcc -o test $(objects)

add.o:add.h
sub.o:sub.h
.PHONY:clean
clean:
    rm test $(objects)

现在问题又来了,如果工程中有很多的.h文件,每一个目标文件需要对应多个.h文件,这样的话,就会有多行的.h文件的依赖关系,能不能把它们收拢起来,统一写在一个地方呢?

 

 

 

makefile简单入门(二)

标签:简单   makefile   search   开始   gcc   问题   语言   自己   工程   

原文地址:http://www.cnblogs.com/hpcpp/p/6957675.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!