Makefile的引入
课堂测试总结
初识Makefile
target ... : prerequisites ...
command
...
...
- target也就是一个目标文件,可以是Object File,也可以是执行文件。也就是
gcc -o
后面要生成的目标文件。 - prerequisites就是,要生成那个target所需要的文件或是目标。可以是.c文件或.h的头文件
- command也就是make需要执行的命令。(任意的Shell命令)也就是命令行中输入的命令。
要求
写出编译第二周测试中vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以。
代码调试中的问题及解决方法
- 编写makefile的时候,一直出现错误
到网上查找资料,发现输入命令前要用tab
键。 - 输入tab,make还是出错,查找资料,在.vimrc文件中添加配置
set tabstop=4
运行还是出错 - 对比网上的vim配置文件,我试着将
set expandtab
改成set noexpandtab
,保存后运行成功了。
运行结果
Myod
要求
- 复习c文件处理内容
- 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
- main与其他分开,制作静态库和动态库
- 编写Makefile
od -tx -tc的功能
就是在十六进制输出其ascii值的同时,显示对应的文件内容
代码调试中的问题及解决方法
- 编写完代码之后,发现只输出第一个字符
修改代码之后,发现是因为第一个字符在字符串中下标为0,会直接跳出循环,只输出第一个字符 - 修改代码完之后,编写makefile文件,出现错误
多次修改makefile,发现要先将main所在的文件编译才可以。那么,如何在makefile中确定命令的先后顺序呢?查找资料发现,可以用;
将同时执行的命令隔开,达到一起运行的目的。
静态库
动态库
补充
经过老师提醒,我认识到我实现的是od -tc -tx
的功能,而od -tc -tx1
实现的功能是将内容以十六进制显示,并以一个字节为单位,两者的区别是多了一个1,如果tx后面没有参数,默认的是四字节为一组,如有参数SIZE,以SIZE字节为一组输出。修改代码后,实现od -tc -tx1
功能。
运行结果
- 实现
od -tc -tx
- 实现
od -tc -tx1