【发布时间】:2018-09-06 02:53:33
【问题描述】:
我正在学习 GNU make 。假设我有一个 hello_world.c 文件和一个 Makefile:
hello_world.c:
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
生成文件:
hello: hello_world.c
gcc hello_world.c -o hello_world
现在,我认为hello 是我的目标,hello_world.c 是它的依赖项。如果 make 以某种方式检测到 hello_world.c 比它的目标文件更新,它会执行相应的命令。
1-make 如何管理文件版本控制以及它如何检测比其他内容更新并需要更新的内容?
2- 如果我使用编辑器更改hello_world.o 并损坏文件,它显然不会执行,但make hello 报告无需执行任何操作!
我的意思是,make 只检查了依赖项是否比目标更旧并且什么都不做就退出了。我认为它应该检测到该目标不是与其最新调用对应的目标。不知何故,它应该比较“依赖和目标的组合”历史,而不是仅仅比较依赖的历史 w.r.t。 target.
3- 这是make的限制吗?我该如何规避这个问题?因为可能有一些外部应用程序弄乱了我的 make 操作的目标。
【问题讨论】:
-
试着让你的 Makefile 变成一行:
hello: hello_world.o
标签: makefile build gnu-make build-automation