【发布时间】:2020-08-13 13:52:23
【问题描述】:
您好,我很难理解 makefile。我和他们一起玩是为了更好地理解他们,但问题是:
all: main
main: main.o funcIO.o funcMan.o
$(CC) -o $@ $^
----------------------------------
funcIO.o: funcIO.c
$(CC) -c -o funcIO.o funcIO.c
funcMan.o: funcMan.o
$(CC) -c -o funcMan.o funcMan.c
无论穿孔线下方的所有内容是否存在,这都有效。有人告诉我这是编写 makefile 的正确方法,但为什么没有目标 funcIO.o 和 funcMan.o 也能工作,如果没有它们也能工作,我们为什么要编写它们?你能像我 5 岁一样解释吗?
感谢您的宝贵时间!
【问题讨论】:
-
因为它们已经存在于构建文件夹中,你可能没有在构建之间删除它们。
-
或者,您可以使用现代编程 IDE 为您完成所有这些工作,并专注于实际编程。从大约 30 年前结束的控制台时代开始,制作文件已成为过去。
-
@Lundin 同意,或者只需一次调用编译器即可编译所有内容。计算机速度很快。
-
make 默认有一组隐式规则。 make、CMake 和其他构建工具并不是“过去的东西”。也不是控制台编程。随着所有类型的计算机迁移到运行在仅具有文本控制台的“机器”上的云,许多任务返回到使用 JSON、YAML、XAML 或其他方式的文本 I/O。而且项目越来越大,有几十甚至上千个文件。因此,所有 IDE 都必须与 make 或 CMake 集成。例如查看 Visual Studio 并查看对内置 CMake、ninja、NMAKE 的支持级别。编译一切都不是一种选择。
-
@Lundin 也许我使用 Makefiles 因为那是在工作中使用的。它们当然不会成为过去。