Makefile 要将所有.o文件放在一个目录中,但在编译第一个文件后停止
我希望有一个整洁的makefile,其中包含明确的依赖项,但将所有的.o对象放在一个单独的目录中,以便稍后(在另一个文件中)将其链接起来 问题是我的make在编译第一个源代码后停止,然后停止,没有任何错误Makefile 要将所有.o文件放在一个目录中,但在编译第一个文件后停止,makefile,Makefile,我希望有一个整洁的makefile,其中包含明确的依赖项,但将所有的.o对象放在一个单独的目录中,以便稍后(在另一个文件中)将其链接起来 问题是我的make在编译第一个源代码后停止,然后停止,没有任何错误 CC=gcc CFLAGS=-c -Wall -pedantic -std=c99 DIR=../obj $(DIR)/CList.o : CList.c CList.h CList_aux.h Observation.h CList_View_aux.h $(CC) $(CFLA
CC=gcc
CFLAGS=-c -Wall -pedantic -std=c99
DIR=../obj
$(DIR)/CList.o : CList.c CList.h CList_aux.h Observation.h CList_View_aux.h
$(CC) $(CFLAGS) CList.c -o $@
$(DIR)/CList_aux.o : CList_aux.c CList.h CNode.h
$(CC) $(CFLAGS) CList_aux.c -o $@
$(DIR)/CList_View_aux.o : CList_View_aux.c CNode.h Observation.h
$(CC) $(CFLAGS) CList_View_aux.c -o $@
$(DIR)/CNode.o : CNode.c CNode.h CNode_aux.h Observation.h CList.h
$(CC) $(CFLAGS) CNode.c -o $@
$(DIR)/CNode_aux.o : CNode_aux.c CNode.h Observation.h
$(CC) $(CFLAGS) CNode_aux.c -o $@
$(DIR)/Observation.o : Observation.c Observation.h Observation_aux.h CNode.h
$(CC) $(CFLAGS) Observation.c -o $@
$(DIR)/Observation_aux.o : Observation.c Observation.h
$(CC) $(CFLAGS) Observation_aux.c -o $@
$(DIR)/Record.o : Record.c Record.h Observation.h
$(CC) $(CFLAGS) Record.c -o $@
如果Makefile确实与您发布的一样多,那么您将丢失
all:
规则。在没有明确的all
规则的情况下,make假设要创建第一个当前规则,因此在此之后它将停止。为了实现您想要的,将其添加(追加)到Makefile(分别更改最终的可执行文件名):
默认情况下,
make
在makefile中构建第一个目标。在本例中,即${DIR}/CList.o
您需要一个不同的第一个目标,通常称为all
:
OBJECTS = \
$(DIR)/CList.o \
$(DIR)/CList_aux.o \
$(DIR)/CList_View_aux.o \
$(DIR)/CNode.o \
$(DIR)/CNode_aux.o \
$(DIR)/Observation.o \
$(DIR)/Observation_aux.o
all: ${OBJECTS}
请注意,无论
${DIR}
中是否存在任何对象文件,这都是有效的;在目录中查找对象文件的通配符可确保已编译过一次的文件是最新的,但不会尝试构建以前编译失败的文件或根本不存在的文件。如果执行rm$DIR/*.o
,则不会重建任何文件。编译失败的东西也不会被重建——是吗?@JonathanLeffler我使用这种模式,它往往会工作。也许我这里有个打字错误?
OBJECTS = \
$(DIR)/CList.o \
$(DIR)/CList_aux.o \
$(DIR)/CList_View_aux.o \
$(DIR)/CNode.o \
$(DIR)/CNode_aux.o \
$(DIR)/Observation.o \
$(DIR)/Observation_aux.o
all: ${OBJECTS}