




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌套 Makefile 实验【实验目的】1、读懂 makefile 文件,能根据 makefile 文件2、能编写简单 makefile 3、掌握嵌套执行 makefile程序结构【实验环境】Ubuntu 8.10版、gcc 等工具【实验步骤】要创建的目录结构如下:一、创建顶层目录首先在用户目录下创建一个 makefileTest 的文件夹:#cd /home/linux/ #mkdir makefileTest #cd makefileTest创建好需要用到的文件夹#mkdir f1 f2 main obj include进入 include 文件夹创建一个共用头文件#cd include
2、#vim myinclude.h输入如下内容:#include 保存退出顶层 Makefile返回顶层目录:#cd .二、创建顶层 Makefile 文件#vim Makefile输入以下内容:三、进入在 f1 目录下创建 makefile #cd f1#vim f1.c输入如下测试代码:保存退出。#vim Makefile输入如下内容:./$(OBJS_DIR)/f1.o: f1.c$(CC) -c $ -o $#include “./include/myinclude.h”void pr1()prf(Message from f1.c.n); return;CC = gcc SUBDIRS
3、 = f1 f2 main objOBJS = f1.o f2.o main.o BIN = myappOBJS_DIR = obj BIN_DIR = binexport CC OBJS BIN OBJS_DIR BIN_DIRall : CHECK_DIR $(SUBDIRS) CHECK_DIR :mkdir -p $(BIN_DIR)$(SUBDIRS) : ECHOmake -C $ ECHO:echo $(SUBDIRS) echo begin compileCLEAN :$(RM) $(OBJS_DIR)/*.o rm -rf $(BIN_DIR)保存退出。进入 f2 目录 #c
4、d ./f2 #vim f2.c输入如下测试代码:保存退出。#vim Makefile输入如下内容:保存退出。 进入 main 目录 #cd ./main #vim main.c输入如下内容:保存退出。#vim Makefile输入如下内容:保存退出。进入 obj 目录 #cd ./obj #vim Makefile输入如下内容:好了,到此准备工作已经完毕,然来测试一下写的 makefile 是否好用。进入顶层 Makefile 所在目录,即 makefileTest 目录。./$(BIN_DIR)/$(BIN) : $(OBJS)$(CC) -o $ $./$(OBJS_DIR)/main.
5、o: main.c$(CC) -c $ -o $#include main()pr1();pr2();return 0;./$(OBJS_DIR)/f2.o: f2.c$(CC) -c $ -o $#include “./include/myinclude.h”void pr2()prf(Message from ); return;#make会出现如下信息:目录树结构如下:看到在 bin 目录下生成了的目标文件 myapp,在 obj 目录下生成了.o 的中间文件。让#b运行下 myapp 看下结果吧。yapp也可以用如下命令清除中间文件和目标文件,恢复 make 之前的状态:#make C
6、LEAN可以看到已经变为 make 之前的目录状态了。大功告成。最后给大家解释一下顶层 makefile 中一些命令的的含义吧。1、注意到有一句echo $(SUBDIRS) echo 其实是一句显示命令通常,make 会把其要执行令行在命令执行前输出到屏幕上。当用“”字符在用这个功能命令行前,那么,这个命令将不被 make 显示出来,最具代表性的例子是,来像屏幕显示一些信息。如:echo 正在编译模块.当make 执行时,会输出“正在编译模块”字串,但不会输出命令,如果没有“”,那么,make 将输出:echo 正在编译模块.正在编译模块.如果 make 执行时,带入 make 参数“-n”
7、或“-just-pr”,那么其只是显示命令,但不会执行命令,这个功能很有利于调试的 Makefile,看看行起来是什么样子的或是什么顺序的。书写令是执而 make 参数“-s”或“-snt”则是全面命令的显示。2、(RM)并不是自己定义的变量,那它是从哪里来的呢?通常在清除文件的伪目标所定义令中“rm”使用选项“f”(-force)来防止在缺少删除文件时出错并退出,使“make clean”过程失败。也可以在“rm”之前加上“-”来防止“rm”错误退出,这种方式时 make 会提示错误信息但不会退出。为了不看到这些讨厌的信息,需要使用上述的第式。另外 make 存在一个内嵌隐含变量“RM”,它
8、被定义为:“RM = rm f” 。因此在书写“clean”规则令行时可以使用变量“$(RM)”来代替“rm”,这样可以免出现一些不必要的麻烦!这是的用法。3、make -C $这是一句嵌套 makefile 的语法,在一些大的工程中,会把不同模块或是不同功能的源文件放在不同的目录中,可以在每个目录中都书写一个该目录的 Makefile,这有利于让的 Makefile 变得更加地简洁, 而不至于把所有的东西全部写在一个Makefile 中,这样会很难着非常大的好处。的 Makefile,这个技术对于模块编译和分段编译有例如,有一个子目录叫 subdir,这个目录下有个 Makefile 文件,来指明了这个目录下文件的编译规则。那么总控的 Makefile 可以这样书写:subsystem:cd subdir & $(MAKE)其等价于:subsystem:$(MAKE) -C subdir定义$(MAKE)宏变量的意思是,也许的 make 需要一些参数,所以定义成一个变量比较利于。这两个例子的意思都是先进入“subdir”目录,然后执行 make 命令。4. export CC OBJS BIN OBJS_DIR BIN_DIR把这个 Makefile 叫
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司演讲感悟活动方案
- 公司新年大扫除活动方案
- 公司朗读活动方案
- 2025年药剂师执业资格考试试卷及答案
- 2025年新媒体与网络传播课程核心知识考试试题及答案
- 2025年现代经济学与区域发展考试试卷及答案
- 2025年数字图书馆建设与管理专业模拟考试卷及答案
- 2025年人际关系与沟通能力考试试题及答案
- 2025年数字版权管理师考试试卷及答案
- 2025年去中心化金融领域职业资格测试题及答案
- aopa无人机培训管理制度
- 2025届中考化学预热模拟卷 【吉林专用】
- 小学生篮球课课件下载
- 2025年中国AI智能鼠标行业市场全景分析及前景机遇研判报告
- 2025年湖北省新华书店(集团)有限公司市(县)分公司招聘笔试参考题库含答案解析
- 2025至2030中国军用推进剂和炸药行业产业运行态势及投资规划深度研究报告
- EPC总承包管理实施方案
- 广东省广州市越秀区2023-2024学年五年级下学期数学期末考试试卷(含答案)
- 三副实习记录簿附页
- 工程认证背景下软件工程专业实践课程平台研究与建设
- 2025年AI Agent+医疗行业研究报告
评论
0/150
提交评论