文件清单:
- $ 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
-
奏效