码迷,mamicode.com
首页 > 系统相关 > 详细

Linux学习——Makefile工程管理

时间:2015-05-07 16:56:14      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:makefile   linux   

使用Gnu make工具来管理程序是每个Linux工程师必须掌握的技能。Make能够是整个程序的编译、链接只需要一个命令(make)就可以完成。Make的工作主要依赖一个称为Makefile的文件。文件描述了整个程序的编译,链接等规则。包括:工程中哪些源文件需要编译以及如何编译,如何最后产生我们想要的可执行文件。

makefile主要由规则和变量两部分构成。

规则:

一般规则如下:

targets : prerequisites

command
目标:依赖 

命令
备注:命令需要使用【TAB】键空格

例如:

hello:hello.c

gcc hello.c -o hello

其中Makefile把那些只包含命令,没有任何依赖的目标称为伪目标(phony targets)。


.PHONY :clean

clean:
           rm -f hello

注:".PHONY"将clean目标声明为伪目标。

如果用户没有定执行某一条规则,make会默认执行makefile中的第1条规则,而这条规则中的目标称之为:最终目标。

例如:

   hello:hello.c
           gcc hello.c -o hello
   
   clean:
           rm -f hello

如果只执行make,默认执行第一条规则。如果执行make clean则执行第二条clean规则。当然也可以这样子执行:make clean hello.执行顺序是clean规则,hello规则。

通用规则:

如果makefile中有许多类似的规则时,可以将这些规则合并为一条通用规则。

例如:

all:led.bin

led.bin: led.o
arm-linux-ld -Tled.lds -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.bin

led.o : led.S
arm-linux-gcc -g -o $@ -c $^

main.o : main.S
arm-linux-gcc -g -o $@ -c $^ 

func.o : func.S
arm-linux-gcc -g -o $@ -c $^


合并后:

all:led.bin

led.bin: led.o
arm-linux-ld -Tled.lds -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.bin

%.o : %.S
arm-linux-gcc -g -o $@ -c $^


变量:

例如:

obj = hello.c

hello:${obj}

gcc ${obj} -o hello

在makefile中除了用户可以自定义变量外,还可以使用系统已经定义好的默认变量。

如:

$^:代表所有依赖文件

$@:代表目标

$<:代表第一个依赖文件

例如:

使用前:
led.o : led.S
arm-linux-gcc -g –o led.o -c led.S
使用后:
led.o : led.S
arm-linux-gcc -g –o $@ -c $^


附加说明:

Makefile中“#”字符后的内容被视作注释。
hello: hello.c
@gcc hello.c –o hello 
@:可以取消回显 

那么什么是回显呢?演示一下:

makefile内容(未去回显):

   hello:hello.c
           gcc hello.c -o hello
   
   clean:
           rm -f hello

运行如下:

技术分享

运行过程中出现的命令行即为回显。

makefile内容(去回显):

   hello:hello.c
           @gcc hello.c -o hello
   
   clean:
           rm -f hello

运行如下:

技术分享


Linux学习——Makefile工程管理

标签:makefile   linux   

原文地址:http://blog.csdn.net/u010275850/article/details/45560369

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