取消一个非常小的GNU makefile

时间:2014-05-08 14:57:22

标签: c makefile

我正在尝试编辑一个makefile,我之前已经构建了自己的文件,但是我很难理解这个非常简单的例子,它明确地使用了我不知道的约定。我已经检查了GNU文档,但我不太确定要搜索什么。

makefile定义SRCS OBJS LIBS CC CFLAGS

makefile然后编译库而不用具体说明。例如文件中的行是:

mgrid.o: array_alloc.h timer.h

但makefile实际执行:

gcc -std=c89 -Wall -Wextra -pedantic   -c -o mgrid.o mgrid.c

有人可以帮忙解释一下这里发生了什么吗?在哪里可以找到有关如何定义这些标准的信息?

4 个答案:

答案 0 :(得分:2)

make有一定的默认规则

$(CC) $(CFLAGS) -o $@ $^

是一般默认规则。

mgrid.o: array_alloc.h timer.h

仅表示mgrid.o也依赖于array_alloc.h timer.h

答案 1 :(得分:1)

  

mgrid.o:array_alloc.h timer.h

表示“只有在更改了array_alloc.h timer.h时才编译mgrid.o”。 你没有说明必须应用哪个规则,所以make将把他的dafault规则用于.o文件,这是Sergey L.给出的行:

  

$(CC)$(CFLAGS)-o $ @ $ ^

当make看到.o文件时,它会查找同名的.c文件。

答案 2 :(得分:0)

在您的makefile中,您将mgrid.o的依赖关系设置为array_alloc.htimer.h

makefile检查是否存在以下文件:

array_alloc.h timer.h

既然如此,它就会继续将mgrid.c编译为mgrid.o

https://www.gnu.org/software/make/manual/make.html

上有一本很好的手册

答案 3 :(得分:0)

正如Sergey L.所说,它告诉mgrid依赖于这两个文件, 这意味着: 检查文件是否存在, 检查编译mgrid.o后是否修改了它们:如果是,请重新编译。