使用makefile和子目录

时间:2017-03-08 00:22:18

标签: c++ makefile

我试图弄清楚如何使用makefile和子目录。但是到现在为止还不走运。我想将所有.o文件放在" build"子目录,所有.cpp应该在" src"和" bin"中的可执行文件文件。

这个makefile是我的尝试:

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)

1 个答案:

答案 0 :(得分:0)

最直接的问题是你操纵变量是错误的。

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,但这应该足以让它工作。