Makefile中依赖文件要不要写头文件
来源:互联网 发布:autodesk的造型软件 编辑:程序博客网 时间:2024/05/22 05:30
首先声明,本人刚入编程不久,很多东西处于起步状态,若表述有错误,还请指出,互相进步。
这段时间在学习Makefile,发现之前很多遇到的makefile依赖文件中都没有头文件,但是后来在系统学习的时候,发现书上经常把头文件写进Makefile的依赖文件中,我就特别好奇到底依赖文件中需不需要写头文件呢?
首先给大家分享一个自己写的代码,由于代码很长,本人故意将代码简化,只要能说明问题即可。
一个头文件:my.h
#include <stdio.h>
#include <string.h>
struct student
{
int num;
char name[20];
};
struct student stu[20];
memset(stu,0,120);
一个主函数:test.c
#include "my.h"
int main(void)
{
printf("hello world.\n");
return 0;
}
还有一个Makefile:
test:test.o
gcc -o test test.o
test.o:test.c
gcc -c test.c
测试方法:
1:直接make,会报错,相信很多人早就看出问题所在了,我在头文件中调用了memset函数,但这个调用是在main函数之外,肯定会报错的。
2:将头文件中的memset这句代码用//给屏蔽起来,然后make,编译通过。
3:再将memset这句代码解除屏蔽,再make一下,编译继续通过(会出现一行提示,意思是未发生改变)。
当时我遇到这个问题的时候,真的是彻底的懵了,今天看了Makefile之后,忽然焕然大悟。原因就在于Makefile的工作原理,是检查依赖文件是否发生变化来决定是否再次编译。
在本例的Makefile中,依赖文件一个是test.c文件,一个是test.o文件,test.o文件是依赖于test.c文件生成的。大家注意,我们在屏蔽memset函数之后,进行make和将memset函数解开,再次make的过程中,我们只修改了my.h的头文件,根本没有修改test.c文件。也就是说,生成test可执行文件的依赖文件test.c文件,我们一直都没有修改,所以我们make之后,根本不会再次编译。
解决方法:
1:我们在依赖文件中添加my.h,所以只要修改了my.h,make之后必定会重新编译,从而发现错误。
2:我们每次编译前先把所有之前生成的文件全都删除(如本例的test.o,test可执行文件,可以在Makefile中增加删除的相关命令),这样由于第二次编译时,发现没有test.o文件(相当于发生了变化),必定又重新编译从而发现错误。
以上都是本人自己总结,由于刚刚起步,可能很多东西都说的不对,望大家指正,谢谢。
- Makefile中依赖文件要不要写头文件
- automake中Makefile.am文件中依赖内容
- Makefile中头文件在依赖关系中作用
- Makefile中头文件在依赖关系中作用
- makefile 自动生成依赖文件
- Makefile中头文件依赖的自动生成
- makefile文件中.phony假想依赖的建立
- qmake pro文件 生成的makefile文件中包含moc文件依赖项的条件
- Makefile的.a 文件的依赖关系
- makefile 自动生成头文件依赖关系
- Makefile自动生成头文件依赖
- makefile处理源文件对头文件的依赖
- makefile依赖文件和输出文件到指定目录
- 嵌入式 书写Makefile中头文件自动依赖关系小技巧
- Linux系统中简单进度条 以及makefile文件的方法和依赖
- Linux Makefile自动生成头文件依赖的过程中,中间文件 .d 的创建与更新
- makefile 文件中得wildcard
- makefile 文件中得wildcard
- Linux命令-工作管理命令:&,ctrl+z,jobs,fg,bg
- 调整图片大小的方法(变大或变小)
- iOS开发指定UIView的某几个角为圆角
- st表
- HDU 3486 RMQ+二分
- Makefile中依赖文件要不要写头文件
- Java反射
- DOM--初级
- Python——数据类型初识
- [NLP论文阅读]Learned in Translation: Contextualized Word Vectors
- linux下查看和杀掉进程方法
- python语法
- leetcode463. Island Perimeter
- 对称二叉树