我在理解 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/