欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

解决修改源文件或头文件后,make 不进行重新编译的问题

程序员文章站 2022-08-15 19:25:49
文件结构:$ tree.├── Makefile├── shmdata.h├── shmread└── shmread.cMakefile 内容:shmread:gcc shmread.c shmdata.h -o shmread.PHONY:cleanclean:rm shmread执行 make:$ makemake: “shmread”已是最新。奇怪了,刚刚明明修改过 shmread.c,为什么 make 报 shmread 已是最新的。冥冥之中,感觉像下...

文件结构:

$ tree
.
├── Makefile
├── shmdata.h
├── shmread
└── shmread.c

Makefile 内容:

shmread:
	gcc shmread.c shmdata.h -o shmread

.PHONY:clean
clean:
	rm shmread

执行 make:

$ make
make: “shmread”已是最新。

奇怪了,刚刚明明修改过 shmread.c,为什么 make 报 shmread 已是最新的。
冥冥之中,感觉像下面那样修改可能有用

shmread:shmread.c
	gcc shmread.c shmdata.h -o shmread

.PHONY:clean
clean:
	rm shmread

make 一下

$ make
gcc shmread.c shmdata.h -o shmread

果然可以
思考下原因,之前那种写法没有指明依赖关系,所以 make 不知道 shmread 依赖 shmread.c,自然就不会比较 shmread.c 和 shmread 这两个文件的修改时间,进而判断是否要重新编译。所以我们这里要手动指明”目标“的”依赖“,这样,依赖修改了,目标就会被重新编译。
同理,头文件一样,也要加在依赖中:

shmread:shmread.c shmdata.h 
	gcc shmread.c shmdata.h -o shmread

.PHONY:clean
clean:
	rm shmread

make 一下

$ make
gcc shmread.c shmdata.h -o shmread

奏效

本文地址:https://blog.csdn.net/lyndon_li/article/details/107557362

相关标签: C Linux makefile