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

xiaoxiao2021-02-28  11

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.S 6、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中的“错误:找不到或... 给主人留下些什么吧!~~ 评论热议
转载请注明原文地址: https://www.6miu.com/read-450117.html

最新回复(0)