【发布时间】:2019-04-20 15:27:01
【问题描述】:
假设项目有以下文件,其中第一个文件依赖于无序列表中其所属类别下的文件:
- main.c
- global.h(包含枚举和#define 宏)
- sdevent.h(通用头文件)
- sdevent.c(包含 sdevent.h 的实现)
- sdlshape.h(通用头文件)
- sdlshape.c(包含 sdlshape.h 的实现)
现在,我有以下生成文件:
CC = gcc
CFLAGS = -g -w -std=c99
LIBS = -lSDL2 -lSDL2_image -lSDL2_ttf
SRCS = main.c sdlshape.c sdlevent.c
OBJS = $(SRCS:.c=.o)
EXE = play
all: $(EXE)
.c.o:
$(CC) -c $(CFLAGS) $<
$(EXE): $(OBJS)
$(CC) -o $(EXE) $(OBJS) $(LIBS)
$(OBJS): global.h sdlevent.h sdlshape.h
run : all
./$(EXE)
clean:
rm -f *.o *~ $(EXE)
目标
$(EXE)依赖于目标.c.o。我绝对需要在目标$(EXE)之后定义目标.c.o吗?
我不这么认为,因为即使目标$(EXE) 依赖于目标$(OBJS),目标($EXE) 也被声明为之前 $(OBJS)。
【问题讨论】:
-
Cmake有更好的教程,是一个更通用的生成make文件的工具。我强烈建议检查一下。
-
@SimonHobbs,AFAIK,make 是最通用的构建工具。但是,如果您说 Cmake 是,那么我会检查一下。感谢您的建议。
-
@klaus 我不确定,但我认为最好删除它。