c - 使用 Makefile 进行简单编译?

标签 c gcc compilation 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'是最新的。”这很好,但是没有创建 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

关于c - 使用 Makefile 进行简单编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29264441/

相关文章:

c - 当 MPI_Bcast 中的 root 是随机的时会发生什么

c - 是否可以使用 GCC 获得经过优化的中间 C 文件?

编译/链接 OpenCV 示例 : camshiftdemo. c

CLion 说 'Process finished with exit code 127'

compilation - 编译时如何在路径中包含库?

c - "Stack smashing detected"在 C 中连接字符串时

C - 为什么这个表达式 *q = *(q + 1) 在处理字符串时产生错误?

c - 如何将两个结构一起 fread() C

gcc - 无法用gcc编译asm hello world

c++ - 在标准类型上使用原子操作