使用 Makefile 进行简单编译?

Simple compiling using a Makefile?

我在理解 Makefile 的概念时遇到了一些困难。我正在用 C 编写一个项目,我有两个 .c 文件需要一起编译才能 运行 程序。我和其他一些人讨论了一些概念,但仍然难以理解 Makefile 的概念。这就是我的。

生成文件:

hs.c:
        gcc -o hs hs_util.c hs.c

hs.c 依赖于 hs_util.c 的函数来完成任务。我知道这是因为包含了来自 hs_util 的头文件...

在hs.c中:

#include "hs_util.h"
#include "hs_config.h"

在hs_util.c

#include "hs_config.h"
#include "hs_util.h"

当我 运行 "make" 命令时,它显示 "make: 'hs.c' is up to date." 这很好,但是没有创建 hs 文件。我做错了什么?

您告诉它构建 hs.c 而不是 hs。所以它尝试了但它存在并且你没有告诉它任何其他文件会迫使它认为该文件已过时(这很好,因为你不想要那个)。

你想要:

hs:
        gcc -o hs hs_util.c hs.c

但这也不够。这只会构建一次然后停止(您需要删除 hs 才能再次构建)。

您需要教 make 哪些输入文件用于制作目标 (hs)。

hs: hs_util.c hs.c
        gcc -o hs hs_util.c hs.c

完成后,您可以使用 automatic variables 避免重复自己。

hs: hs_util.c hs.c
        gcc -o $@ $^

完成后,您实际上可以利用 make built-in rules 并执行此操作。

hs: hs_util.o hs.o

如果你还想告诉 make 它需要在 .h 文件更改时重建 .o 文件,你可以添加这个。

hs.o hs_util.o: hs_util.h hs_config.h

记住 make 规则的一般形式是 (example, syntax):

output-file: input-file
    commands to generate output-file from input-file

我觉得你有点打字错误。您的 makefile 想要构建一个目标 "hs.c"

尝试更改以下内容:

> hs.c:
>         gcc -o hs hs_util.c hs.c

hs:
        gcc -o hs hs_util.c hs.c