一个简单的makefile文件的编写.docx

上传人:scccc 文档编号:14770461 上传时间:2022-02-19 格式:DOCX 页数:8 大小:14.73KB
返回 下载 相关 举报
一个简单的makefile文件的编写.docx_第1页
第1页 / 共8页
一个简单的makefile文件的编写.docx_第2页
第2页 / 共8页
一个简单的makefile文件的编写.docx_第3页
第3页 / 共8页
一个简单的makefile文件的编写.docx_第4页
第4页 / 共8页
一个简单的makefile文件的编写.docx_第5页
第5页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《一个简单的makefile文件的编写.docx》由会员分享,可在线阅读,更多相关《一个简单的makefile文件的编写.docx(8页珍藏版)》请在三一文库上搜索。

1、一个简单的 makefile 文件的编写1. makefile 文件的主要结构简介:makefile 文件里面主要有三种内容:1. 变量声明: 变量声明就是一种基本的严格字符替换的操作。 比如在前面声明了: objects=program.o foo.o utils.o那么在后面出现的所有 $(objects) 或者 $objects 都会被自动替换成上面的那个字符序列,而且是严格替 换,即不带空格的。2. 映射法则3. 命令:映射法则和命令通常都是联合起来组成这样的结构 形式:target.: mand可以简单地理解为通过 prerequisites ,也就是先 决的依赖文件,采取后面描述的

2、相应的命令 (这里的命令 都是linux里的shell命令)command之后(一般是)生 成了文件 target 。命令的前面都要按以下 tab 建留一段 空白来表示它是命令。有的 target 后面并没有先决条件,也就是后面的命 令是无条件执行的。这个结构总的作用就是告诉make,target 是不是out of date ,具体视它的依赖文件而定, target 不存在 也视为 out of date 。然后就是如果过期了,那么更新, 就是运行下面的命令来更新。2.前面那篇文章emacs中我们建立了两个 makefile 文件,但是是空的,还没有任何内容。现在我们填上如 下内容:(这个是

3、一个最简单的例子,不过是一个不错的 入门。)在/project/hello的主目录下面的 makefile 文件的内容如下:prefix = /usr/local exec_prefix = $(prefix) bindir = $(exec_prefix)/binexport prefixexport exec_prefixexport bindirall clean install uninstall :cd src & $(MAKE) $.PHONY: all cleaninstall uninstall在 /project/hello/src 目录下面的 makefile 文件内 容如

4、下:all: hellohello: main.c$(CC) -o $ main.cclean:rm helloinstall:install -d $(bindir)install -m 0755 hello $(bindir)uninstall:rm $(bindir)/hello.PHONY: all clean install uninstall 我们等下详细说明,先看下运行情况:QOO wanzewanze-pc 桌面/project/heUo文件(F)编辑(E)直看(V)攫索 终端 帮K(H) rfanze(awan?e-pc: *桌面 /proj ect/hello$ make

5、cd src 拆 make allnake 1:正衽逬人目录 Vhame/wanze/桌 面/project/hello/src cc -o hello akefl:正在离幵目录 /home/wanze/桌面 /project/hello/sr1 ft/anzewanze*pc/project/helLo$ sudo make install sudo password for wanze: cd src make installnakel:正在逬 人昌录 1 Zhame/wanze/面/pgjEct/hJg庐“ install -d /usr/local/bininstall -m 075S

6、 hello /usr/local/binitake 1:正在离幵目录 L /home/wan?e/桌面/prajmct/hElla庐c1 rfanzewanze-pc: 7桌面/proj ect/hello$ helloheUorthe world!anzewanze-pc:-/jfefproject/hello$ sudo make uninstall cd src 曲 make unlnstaLLnakel:正在进人目录 /home/wanze/project/hello/src rm /usr/lacal/bin/hellanake 1:正在离幵目录 /hone/wanze/proje

7、ct/hello/src1m目nzt加目nre-pc;/桌面 fpoj 年匚tFhglLo$ makecd src make cleannakel:正在逬人且录 1 /home/wane/桌面/project/hello/src rm hello1: IE 在蕃 开目录 /homm/WEnwEf桌 面现在 makefile 支持这四个命令:make, makeinstall , make clean 和 make uninstall 。我们从上图可以看出可以直接从终端调用我们生成的 程序 hello,然后返回 “hello , the world ! ”。首先我们看主目

8、录下的makefile文件,前面那部分是变量声明,这个等下还会说到。然后是export变量,这个就是主目录下的主makefile文件可以使用这个命令,意思是将变量和子一级目录下的makefile共享。然后我们看到all clean install uninstall : cd src & $(MAKE) $ .PHONY: all clean install uninstall这实际上是一个跳转结构,首先介绍下.PHONY是个什么意思,前面说了每一个 target 默认都是一个待生成 文件,但是.PHONY后面跟着的target的意思是这些 target 不用生成文件。那么总的来说这里的 al

9、l , clean , install , uninstall 在这里是些没有依赖文件的不用生 成最终 target 文件的执行命令了。这些执行命令就是前 面说的 make, make install , make clean 和 make uninstall 。make的意思实际上就是 makeall,这两个命 令是没有区别的。然后我们看到命令, cd src 这个很容易理解,就是 跳转到 src 目录中去了。然后 &符号的意思是逻辑与, 即前一命令执行完之后再执行后面的命令。而后面的 $(MAKE)可能是一个具有系统默认值的变量,在这里应该 就是makeb而$符号的意思则是指代当前的tar

10、get。比如说我现在 make clean ,那么命令最终就成了这个样子:cd src &make clean然后下一个 make clean 的命令实际上是对 src 子目 录下的 makefile 文件说的,我们看到这里简单的: clean:rm hello即把生成的可执行文件 hello 删掉即可。然后我们再来看子目录下那个 makefile 文件如何处 理 make all 命令:all: hellohello: main.c$(CC) -o $ main.c我们看到,这里首先说明 all 依赖于 hello ,然后 hello 依赖于 main.c ,而要生成或者更新 hello 的

11、话需要 执行下面的命令:cc -o hello main.c上面的 $(CC) 也是具有系统默认值的变量,就是cc,不过在GNU/LINUX体系下可能调用的是 gcc工具。后面的 选项 -o 的意思是编译连接然后生成后面的那个名字的文件。名字在这里就是 helloo然后我们再来看 make install 命令执行的情况:install:install -d $(bindir)install -m 0755 hello $(bindir) 前面说过了这个变量是继承自主目录 makefile 文件 中的定义,然后翻译出来 $(bindir) 就是 /usr/local/bin linux 系统在

12、终端可以直接调用的命令存放点有两个位 置,另外的一个是 /usr/bin 。 /usr/local 文件夹内部的 结构和 /usr 内部的结构非常相似。似乎讲起来 /usr 是供 系统内部的软件使用的空间,但这个规矩并不是死的。uninstall 命令我们看到就是一个删除对应位置 hello 文件的操作。所以现在就把 linux 中的 install 命 令讲讲就可以了。第一个 install 命令接着 -d 的选项的意思就是目录 确认,在这里我觉得有点多余。第二个 install 命令接着 -m 的选项的意思就是把 hello 复制到指定的目录中去,然后相应文件也就是 hello 文件的权限设置成为 0755. 关于权限我觉得在这里命令似乎也没有什么好说的。在这里用第二个 install 就可以搞定了,过程是复制,加权限,更新时间戳。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1