使用MakeFile和子目录

Working with makefile and subdirectories

本文关键字:子目录 MakeFile 使用      更新时间:2023-10-16

我正在尝试弄清楚如何使用makefile和子目录。但是到现在为止。我想将所有.o文件放在"构建"子段中,所有.cpp都应在" src"中,而可执行文件则在" bin"文件中。

这是我的尝试:

PROG = prog1
BINPATH = bin/
CC = g++
CPPFLAGS = -Wall -pedantic -ansi -Iinclude
OBJS = main.o calc.o show.o
BUILDPATH = build/
SRCPATH = src/$(PROG):$(BUILDPATH)$(OBJS)
$(CC) -o $(BINPATH)$(PROG) $(BUILDPATH)$(OBJS)
$(BUILDPATH)main.o:
    $(CC) $(CPPFLAGS) -c $(SRCPATH)main.cpp
$(BUILDPATH)cacula.o:calc.h
    $(CC) $(CPPFLAGS) -c $(SRCPATH)calc.cpp
$(BUILDPATH)show.o:show.h
    $(CC) $(CPPFLAGS) -c $(SRCPATH)show.cpp
clean:
    rm -f core $(BINPATH)$(PROG) $(BUILDPATH)$(OBJS)

最直接的问题是您正在操纵变量。

OBJS = main.o calc.o show.o
BUILDPATH = build/

到目前为止,一切都很好,但是$(BUILDPATH)$(OBJS)将扩展到build/main.o calc.o show.o,这不是您想要的。尝试以下操作:

OBJS := main.o calc.o show.o
BUILDPATH := build/
OBJS := $(addprefix $(BUILDPATH), $(OBJS))

然后您可以这样使用OBJS

$(PROG): $(OBJS)
    $(CC) -o $(BINPATH)$(PROG) $(OBJS)

还有其他几种改进此makefile的方法,但这应该足以使其正常工作。