c - 使用 Makefile 链接多个文件

标签 c makefile

我有点迷失在 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/

相关文章:

c - Valgrind 在线程中抛出无法解释的错误

C:删除双向链表中的第一项时出现段错误

c - 在 gstreamer 中的两个源之间动态切换

c - 为什么我的结构定义不完整?

c++ - 在 travis for clang 上使用不同的 libc++ 版本

makefile - Makefile Target `.c.o` 是做什么用的?

c - 请有人帮我解释链表吗?

c - gcc 编译器选项是什么? (-lGL -lGLU -lglut)

c - 在C中,如何禁用makefile中的优化?

c++ - build ICU 的问题