我在掌握Makefile的概念时遇到了一些麻烦。我用C编写项目,我有两个.c文件,需要一起编译才能运行程序。我和其他人一起讨论了一些概念,但我仍然难以理解Makefiles的概念。这就是我所拥有的。
生成文件:
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文件没有被创建。我做错了什么?
答案 0 :(得分:3)
你告诉它要建立hs.c
而不是hs
。所以它尝试但是存在并且你没有告诉它任何其他文件会强迫它认为文件已经过时(这很好,因为你不想要那个)。
你想:
hs:
gcc -o hs hs_util.c hs.c
但这还不够。这只会构建一次然后停止(在重新构建之前,您需要删除hs
)。
您需要教导输入文件输入目标(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当.o
文件发生更改时需要重建.h
文件,您可以添加此文件。
hs.o hs_util.o: hs_util.h hs_config.h
请注意,制作规则的一般形式为(example,syntax):
output-file: input-file
commands to generate output-file from input-file
答案 1 :(得分:0)
我觉得你有一点错字。你的makefile想要建立一个目标" hs.c"
尝试更改以下内容:
> hs.c:
> gcc -o hs hs_util.c hs.c
要
hs:
gcc -o hs hs_util.c hs.c