Makefile如何正常工作

时间:2013-08-07 13:51:52

标签: makefile gnu-make

我正在为用C编写的gtk应用程序编写代码,并对此有一些疑问。

# Compiler
CC = gcc
CFLAGS = -Wall -g -o
RM = rm -f

# ADDITIONAL HEADER PATH 
GTKINC = `pkg-config --cflags gtk+-3.0`
GTKLIB = `pkg-config --libs gtk+-3.0` 

INC = $(GTKINC)
LIBLNK = $(GTKLIB)


# SOURCES, OBJECTS, EXECUTABLE
SRCS = hello.c
OBJS = $(SRCS:.c = .o)
EXEC = hello

.PHONY: clean

all: $(EXEC)
    @echo compile complete 

$(EXEC): $(OBJS)
    $(CC) $(INC) $(CFLAGS) $(EXEC) $(OBJS) $(LIBLNK)

clean:
    $(RM) *.o *~ $(EXEC)

之前,当我写Makefiles时,我为每个目标文件添加了行

例如

blah blah

a.o: 1.h A.c B.c
        $(CC) blah blah
blah blah

然后,我有点懒,试着做一些更容易修改的文件 谷歌搜索,最后产品是上面的代码。 1.这实际上和我之前做的一样吗?(就像在例子中一样) 我发现代码编译正确,但我不确定它是否检查过时 目标文件。(这是'make'的全部含义)
2.你必须对头文件使用'depend'来检查过时的源文件吗? 3.它有点偏离主题,但有什么区别 gcc -o hello.o hello.h hello.c和 gcc -c hello.c?

1 个答案:

答案 0 :(得分:1)

  

2.你是否必须在头文件上使用'depend'来检查过时的源文件

您应该自动生成头文件的依赖项。见https://stackoverflow.com/a/9598716/412080