我正在尝试使用 Makefile 编译一堆 .cpp
文件位于 src/code/*.cpp
,然后编译每个 *.o
在 build/
, 最后用 build/
生成可执行文件以及。
我已经阅读了一些我尝试使用但遇到了我不明白的问题的答案。
CC = g++
FLAGS = -g -c
SOURCEDIR = /src/code
BUILDDIR = build
EXECUTABLE = DesktopSpecificController
SOURCES = $(wildcard src/code/*.cpp)
OBJECTS = $(patsubst src/code/*.cpp,build/%.o,$(SOURCES))
all: dir $(BUILDDIR)/$(EXECUTABLE)
dir:
mkdir -p $(BUILDDIR)
$(BUILDDIR)/$(EXECUTABLE): $(OBJECTS)
$(CC) $^ -o $@
$(OBJECTS): $(BUILDDIR)/%.o : $(SOURCEDIR)/%.cpp
$(CC) $(FLAGS) $< -o $@
clean:
rm -f $(BUILDDIR)/*o $(BUILDDIR)/$(EXECUTABLE)
我确实收到以下错误,我不知道为什么:
Makefile:19: target `src/code/main.cpp' doesn't match the target pattern
我还看到,在尝试构建 EXECUTABLE 时,它没有使用 .o 文件,所以我的规则似乎在这里是错误的。
最佳答案
您的 patsubst
功能错误;你不能使用 shell 通配符,比如 *
.你要:
OBJECTS = $(patsubst $(SOURCEDIR)/%.cpp,$(BUILDDIR)/%.o,$(SOURCES))
你也应该使用
SOURCEDIR
和 BUILDDIR
无处不在,而不仅仅是在某些地方(否则会出现不一致的情况)。最后,你的 SOURCEDIR 值是错误的:它不应该以 /
开头我预计:SOURCEDIR = src/code
SOURCES = $(wildcard $(SOURCEDIR)/*.cpp)
关于Makefile:从目录编译到另一个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16924333/