我有点迷失在 Makefile 业务中,我正试图接受它。如果有人能在我目前正在编程的示例中说清楚,我会很高兴。
我有这些文件:
my-bit-vector.h -> a header file included in eratost.c, ppm.c
ppm.c -> a .c file which includes my-bit-vector.h and error.h
error.h -> a header file included in eratost.c, ppm.c
error.c -> a .c file which includes error.h and defines the functions in it
erato.c -> a .c file which includes my-bit-vector.h and error.h
我需要将它们链接到一个可执行文件中。我将如何通过 Makefile 来做到这一点?我希望我没有忘记什么。你能帮忙吗?
最佳答案
Makefile 的内容,简单来说就是一个或多个目标(您想要构建的东西)。每个目标都有依赖项(如果任何依赖项不存在,则必须构建它们,如果它们存在但比目标更新,则必须重建目标)和规则(构建目标的命令,大概来自依赖项)。
在您的例子中,假设您的最终输出是一个名为program
的程序。您已经确定了构建它的来源,但您不是直接从源构建可执行文件,而是从目标文件构建。您可以像这样启动您的 makefile:
program: ppm.o error.o erato.o
cc -o program ppm.o error.o erato.o
警告 规则行上的间距(上面显示的 cc
命令行)需要 TAB,而不仅仅是空格!
这足以开始,但还不足以成为正确的。您会注意到 .o 还没有 target:dependency/rules,但它仍然有效,因为 Make 有一些内置规则。
有了这个 makefile,如果您键入“make”两次,第一次您会看到所有内容都已构建,而第二次则不会——没有任何改变,因此不需要重建。不幸的是,如果你现在编辑你的 .h,.c 仍然不会重建,所以让我们解决这个问题:
program: ppm.o error.o erato.o
cc -o program ppm.o error.o erato.o
ppm.o: ppm.c my-bit-vector.h error.h
error.o: error.c error.h
erato.o: erato.c my-bit-vector.h error.h
现在您已将依赖项设置为使 make 重建当 header 更改时必须重建的源。这些源代码构建没有规则,因为这里的内置规则(通常)就足够了。当然,如果需要,您可以覆盖内置的。
在这里,当您键入“make”时,该工具将找到第一个 目标(程序)并检查其依赖项。然后它将确保它的每个依赖项都是最新的(基于它们的目标:依赖项/规则定义),只要有需要考虑构建的目标就会递归。最后,它将为此目标应用规则以完成其构建。
使用 makefile 可以完成很多,这只是一个简短的介绍。
关于c - 使用 Makefile 链接多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22636209/