Makefile 使用不同目录中的源文件和目标文件自动生成文件
我正在尝试组合一个makefile,它将从一个目录(例如Makefile 使用不同目录中的源文件和目标文件自动生成文件,makefile,Makefile,我正在尝试组合一个makefile,它将从一个目录(例如src)中获取源文件,将它们编译成另一个目录(例如build)中的目标文件,然后获取这些文件并从主目录中创建一个静态库 以下是我迄今为止的努力: LIBNAME := test LIBNAME := lib$(LIBNAME).a CC = g++ CFLAGS := -O0 -Wall -g -fPIC INCLUDE := include SOURCE := src BUILD := build CPPFILES := $(fore
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)
无论如何,您似乎都需要GNU make(foreach函数),因此将旧式的后缀规则.cpp.o重写为
$(BUILD)/%.o : $(SOURCE)/%.cpp
我们应该做到这一点。您也可以尝试使用VPATH变量或VPATH指令,请参阅make手册以了解这些内容
一般来说,您可以使用automake
解决这个问题,它为您提供了大部分这方面的功能
$(BUILD)/%.o : $(SOURCE)/%.cpp