博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实例讲解Linux下的makefile
阅读量:6623 次
发布时间:2019-06-25

本文共 1911 字,大约阅读时间需要 6 分钟。

 

1、程序代码结构如下

makefile/|-- Makefile|-- haha.c`-- hehe.c

  1.1、需要被编译的源代码如下

$ cat haha.c #include "stdio.h"int main(){    printf("ha ! ha !\n");    return 0;}
$ cat hehe.c #include "stdio.h"int main(){    printf("he ~ he ~\n");    return 0;}

  1.2、makefile的脚本如下

$ cat Makefile .PHONY : dummyCFLAGS    = LDFLAGS    = ALL_FILES    = hehe hahaall : $(ALL_FILES)hehe : hehe.o    gcc -o hehe hehe.ohehe.o : hehe.c    gcc -c hehe.c -o $@haha : haha.o    gcc -o haha haha.ohaha.o : haha.c    gcc -c haha.c -o haha.oclean : dummy    rm -rf *.o    rm -rf $(ALL_FILES)

  1.3、执行make命令后的编译结果

$ makegcc -c hehe.c -o hehe.ogcc -o hehe hehe.ogcc -c haha.c -o haha.ogcc -o haha haha.o
-rwxrwxr-x 1 normal normal 4940 12-11 16:08 haha-rw-rw-r-- 1 normal normal   72 12-11 16:03 haha.c-rw-rw-r-- 1 normal normal  872 12-11 16:08 haha.o-rwxrwxr-x 1 normal normal 4940 12-11 16:08 hehe-rw-rw-r-- 1 normal normal   72 12-11 16:03 hehe.c-rw-rw-r-- 1 normal normal  872 12-11 16:08 hehe.o-rw-rw-r-- 1 normal normal  279 12-11 16:04 Makefil

这样我们需要的程序就编译出来了。文件结构如下

makefile/|-- Makefile|-- haha|-- haha.c|-- haha.o|-- hehe|-- hehe.c`-- hehe.o

多出来了4个文件,haha、haha.o、hehe、hehe.o

  1.4、执行结果

$ ./haha ha ! ha !
$ ./hehe he ~ he ~

  1.5 执行命令make clean,结果如下

$ make cleanrm -rf *.orm -rf hehe haha

多出来的文件都被删除了,接下来对makefile的脚本文件进行一下讲解。

2、下面是对makefile文件的讲解

  2.1、在make命令执行后,会在当前目录下搜索makefile、Makefile。如果当前目录没有这个两个文件的话就会报错:找不到makefile

$ makemake: *** 没有指明目标并且找不到 makefile。 停止。

 

  2.2、现在把Makefile改名,用参数-f 来指定要加载的脚本文件也是可以顺利编译的。

$ mv Makefile realmake$ make -f realmake gcc -c hehe.c -o hehe.ogcc -o hehe hehe.ogcc -c haha.c -o haha.ogcc -o haha haha.o

  2.3、在Makefile脚本中,make会默认寻找第一个目标进行编译。比如上面的Makefile中,make会从上到下进行扫描,当扫描到“all :”的时候,终于找到一个目标了,然后就会对这个目标进行操作。当make发现这个all需要$(ALL_FILES)的时候,时候就会去寻找$(ALL_FILES)。但是,make在加载脚本的时候会把ALL_FILES变量进行置换为hehe haha,所以换成了寻找hehe和haha进行编译。当执行hehe的时候又发现需要hehe.o,然后又去寻找hehe.o,如此循环寻找吧,直到hehe.c的时候,终于在当前目录找到hehe.c了,这个调用栈才算到头了。

 

转载地址:http://obtpo.baihongyu.com/

你可能感兴趣的文章
现代前端开发路线图:从零开始,一步步成为前端工程师
查看>>
elixir 集成ejabberd
查看>>
Oracle绝对值函数
查看>>
mysql 的mgr集群
查看>>
html5播放mp4视频代码
查看>>
032_nginx配置文件安全下载
查看>>
Linux下tomcat修改成的80端口无法访问
查看>>
Kubernetes 集群日志管理 - 每天5分钟玩转 Docker 容器技术(180)
查看>>
redis实现对账(集合比较)功能
查看>>
为了好好看球,学霸们用深度学习重建整个比赛3D全息图
查看>>
浅谈持续集成
查看>>
【ZH奶酪】如何用textgenrnn处理中文
查看>>
CentOS双机中Docker下安装Mysql并配置互为主从模式
查看>>
OkHttp3源码详解(六) Okhttp任务队列工作原理
查看>>
这样做,轻松在Word中使用MathType
查看>>
VS Code非英语版本连接TFS错误解决方案
查看>>
angular5中使用jsonp请求页面
查看>>
sql in not in 案例用 exists not exists 代替
查看>>
使用newtonjson解决Json日期格式问题
查看>>
WEB前端资源代码:学习篇
查看>>