自动makefile,包含不同目录中的源文件和目标文件

时间:2011-09-17 09:24:58

标签: makefile

我正在尝试整理一个makefile,它将从目录中获取源文件(例如src),将它们编译成另一个目录中的目标文件(例如。build),然后获取这些文件并在主目录中创建一个静态库。

到目前为止,这是我的努力:

LIBNAME := test
LIBNAME := lib$(LIBNAME).a

CC = g++
CFLAGS := -O0 -Wall -g -fPIC
INCLUDE := include
SOURCE := src
BUILD := build

CPPFILES := $(foreach dir, $(SOURCE)/, $(notdir $(wildcard $(SOURCE)/*.cpp)))
OBJFILES := $(addprefix $(BUILD)/, $(CPPFILES:.cpp=.o))

all: $(LIBNAME) $(OBJFILES)

$(LIBNAME): $(OBJFILES)
    ar rcs $(LIBNAME) $(OBJFILES)

.cpp.o:
    $(CC) $(CFLAGS) -I$(INCLUDE) -c $< -o $@

clean:
    rm -rf $(BUILD)

这给了我这个:

make: *** No rule to make target `build/point.o', needed by `libtest.a'.  Stop

1 个答案:

答案 0 :(得分:3)

你似乎确实要求GNU make(foreach函数),所以重写旧式后缀规则.cpp.o到

$(BUILD)/%.o : $(SOURCE)/%.cpp

应该做的伎俩。您也可以尝试使用VPATH变量或vpath指令,请参阅make manual。

一般情况下,您可能只是使用automake解决此问题,{{1}}会为您完成大部分内容。