我试图弄清楚如何使用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)
答案 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,但这应该足以让它工作。