您的位置:首页 > 运维架构 > Linux

Linux makefile 教程 非常详细,且易懂

2017-08-15 09:02 155 查看
http://blog.csdn.net/liang13664759/article/details/1771246
Linux makefile 教程 非常详细,且易懂1.Makefile用途
使用GNU Make工具来管理程序是每个Linux工程师必须掌握的技能。
Make能够使整个程序的编译、链接只需要一个命令(make)就可以完成。
Make的工作主要依赖于一个叫为Makefile的文件。Makefile文件描述了整个程序的编译,连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译,如何最后产生我们想要得可执行文件。

2、Makefile构成-规则
Makefile中最重要的组成部分是“规则”

规则:用于说明如何生成目标文件,规则的格式

如下:
targets : prerequisites
command
目标 依赖 命令
特别提供:命令需要使用【TAB】键空格

3、Makefile构成-伪目标
Makefile中把那些只包含命令,没有任何依

赖的目标称为”伪目标”(phony targets).

.PHONY : clean

clean :

rm –f hello main.o func.o

“.PHONY” 将“clean”目标声明为伪目标

4、Makefile构成-最终目标
1.当一个makefile中有多条规则时,如何单独执行某条规则?

    make led.o           (带一个目标名,自动判断)
2. 如果用户没有指定执行某一条规则,make会默认执行makefile中的第1条规则,而这条规则中的目标称之为:最终目标

5、Makefile规则-变量
使用变量前:

app1: app1.o func1.o func2.o

gcc app1.o func1.o func2.o -o app1

app2: app2.o func1.o func2.o

gcc app2.o func1.o func2.o -o app2

使用变量后:

obj=func1.o func2.o

app1: app1.o $(obj)

gcc app1.o $(obj) -o app1

app2: app2.o $(obj)

gcc app2.o $(obj) -o app2
重复使用的名字,可以用变量表示。没有特别的类型区别。使用时加$()
在makefile中,用户除了可以自己定义变量外,还可以使用

存在
存在系统已经定义好的默认变量。
 $^:代表所有的依赖文件
 $@:代表目标
 $<:代表第一个依赖文件
这些都是相对于目标名和依赖名来说的,如led.o:led.S
这些都是相对于目标名和依赖名来说的,如led.o:led.S6、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 $^

7、Makefile构成-通用规则
当一个makefile中有许多类似的规则时,如何将这些规则合并为一条通用规则?

%.o :%.S

    arm-linux-gcc -g -o kslasjd -o klsdjalkdj
3.使用技巧-去回显
Makefile中“#”字符后的内容被视作注释。
hello: hello.c
@gcc hello.c –o hello

@:
@:取消回显 (演示)

3.使用技巧-文件名
make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:

make –f 文件名是Makefile文件 


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>

阅读(380) | 评论(0) | 转发(0) |

0
上一篇:arm-linux-gcc/ld/objcopy/objdump使用总结

下一篇:eclipse工具初始化配置

相关热门文章
SHTML是什么_SSI有什么用...

查看linux中某个端口(port)...

卡尔曼滤波的原理说明...

shell中字符串操作

关于java中的“错误:找不到或...

给主人留下些什么吧!~~

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: