Makefile中的这个变量是什么?

时间:2018-04-13 13:58:58

标签: c makefile

所以这里有一个我已经给出的Makefile,我添加了评论。

MF= Makefile_c  #name of the makefile
CC= cc          #compiler to use
CFLAGS= -g      #flags to use
LFLAGS= -lm     #flags to use after the thingy
EXE=    hello   #name to give the executable
INC= \          # ??? What's this for ???
#   No user-defined include files at present - list here if required.
# name of the source file
SRC= \
    hello.c

#delete default suffix
.SUFFIXES:
#define the suffixes we are interested in
.SUFFIXES: .c .o
OBJ=    $(SRC:.c=.o)    # names to give the object files
#The .o files depend on the .c files. Compile the object files.
.c.o:
    $(CC) $(CFLAGS) -c $<

all:    $(EXE)    #The output is the executable

$(OBJ): $(INC)    #The objects depend on whatever INC is

# The executable depends on the object files. build it from the object files.
$(EXE): $(OBJ)
    $(CC) $(CFLAGS) -o $@ $(OBJ) $(LFLAGS)

# ??? the object files depend on the makefile???
$(OBJ): $(MF)

# remove any old executables or object files.
clean:
    rm -f $(OBJ) $(EXE) core

我还在学习makefile,所以如果我发现错误,请纠正我。 makefile工作正常但是我想让它适应我的程序,它有多个文件和头文件。我怀疑变量$INC会以某种方式使这成为可能,但到目前为止,我尝试使用它并没有奏效。

现在我想了解这个makefile正在尝试做什么,你告诉我$INC的用途是什么?

1 个答案:

答案 0 :(得分:5)

  

makefile工作正常但是我想让它适应我的程序,它有多个文件和头文件。我怀疑变量$ INC会以某种方式使这成为可能

不幸的是,没有。 \只是一个续行,因此您可以在下一行中为变量写入内容。它在这里是空的。这只是一个非常简单(和古老!)的依赖方法:自己列出它们。目的是列出您的C源文件#includes的所有文件,因此当任何这些包含的文件发生更改时,make将重建。

有许多高级模式,gcc(和其他编译器)允许为make执行自动依赖关系信息,但这超出了此问题的范围。 (*)

对于具有多个源文件的构建,此Makefile已经支持它,再次使用&#34;古代&#34;方式,后缀规则。它会自动考虑最终程序目录中的所有.c个文件。

(*)正如Tormund Giantsbane在评论中提到的,this document has nice information on the topic auf automatic dependencies