[应用相关]

Makefile 管理工程

[复制链接]
496|16
手机看帖
扫描二维码
随时随地手机跟帖
gaoke231|  楼主 | 2019-3-14 23:12 | 显示全部楼层 |阅读模式
GNU的make能够使整个软件工程的编译、链接只需要一个命令就可以完成。Make在执行时,需要一个命名为Makefile的文件。Makefile文件描述了整个工程的编译,连接等规则。其中包括:工程哪些源文件需要编译以及如何编译;需要创建哪些库文件以及如何创建这些库文件;如何最后产生我们想要的可执行文件。

gaoke231|  楼主 | 2019-3-14 23:12 | 显示全部楼层
Makefile (例)
hello: main.o fun1.o fun2.o
      gcc main.o fun1.o fun2.o -o hello
main.o:main.c
      gcc -c main.c
fun1.o: fun1.c
      gcc -c fun1.c
fun2.o: fun1.c
      gcc -c fun1.c
.PHONY:clean
clean:
rm -f hello main.o fun1.o fun2.o

使用特权

评论回复
gaoke231|  楼主 | 2019-3-14 23:12 | 显示全部楼层
规则:用于说明如何生成一个或多个目标文件,规则格式如下:
targets:prerequisites  command  
目标:    依赖           命令
main.o:main.c
   gcc -c main.c

使用特权

评论回复
gaoke231|  楼主 | 2019-3-14 23:13 | 显示全部楼层
Makefile 文件名
make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:make -f 文件名

使用特权

评论回复
gaoke231|  楼主 | 2019-3-14 23:13 | 显示全部楼层
Makefile(伪目标)
Makefile中将那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)
.PHONY:clean
clean:
      Rm -f hello main.o fun1.o fun2.o
“.PHONY”将“clean”目标声明为伪目标

使用特权

评论回复
gaoke231|  楼主 | 2019-3-14 23:13 | 显示全部楼层
Makefile(变量)
Obj=main.o fun1.o fun2.o fun3.o
hello:$(obj)
     gcc$(obj) -o hello
在Makefile中。存在系统变量的变量
$^ :代表所有的依赖文件
$@ :代表目标
$< :代表第一个依赖文件

使用特权

评论回复
gaoke231|  楼主 | 2019-3-14 23:14 | 显示全部楼层
例: hello:main.o fun1.o fun2.o
         gcc main.o fun1.o fun2.o -o hello
     =>
     hello:main.o fun1.o fun2.o
         gcc $^ -o $@

使用特权

评论回复
gaoke231|  楼主 | 2019-3-14 23:16 | 显示全部楼层
Makefile中的 “#”字符后的内容被视作注释。

使用特权

评论回复
gaoke231|  楼主 | 2019-3-14 23:27 | 显示全部楼层
@:取消回显
hello:hello.c
22635c8a72ebba7cc.png

使用特权

评论回复
paotangsan| | 2019-4-3 12:59 | 显示全部楼层
非常感谢楼主分享

使用特权

评论回复
renzheshengui| | 2019-4-3 13:00 | 显示全部楼层
长知识了 谢谢楼主

使用特权

评论回复
peripheral| | 2019-4-3 15:31 | 显示全部楼层
感谢楼主分享!学习了!

使用特权

评论回复
wowu| | 2019-4-3 17:40 | 显示全部楼层
非常感谢楼主分享

使用特权

评论回复
xiaoqizi| | 2019-4-3 17:46 | 显示全部楼层
非常感谢楼主分享

使用特权

评论回复
gaoke231|  楼主 | 2019-4-10 18:37 | 显示全部楼层
paotangsan 发表于 2019-4-3 12:59
非常感谢楼主分享

这个不难,就是拿来给大家看看

使用特权

评论回复
gaoke231|  楼主 | 2019-4-10 18:37 | 显示全部楼层
renzheshengui 发表于 2019-4-3 13:00
长知识了 谢谢楼主

哈哈,客气了

使用特权

评论回复
gaoke231|  楼主 | 2019-4-10 18:38 | 显示全部楼层
peripheral 发表于 2019-4-3 15:31
感谢楼主分享!学习了!

应该的,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

1310

帖子

5

粉丝