[英]Makefile: Compiling from directory to another directory
我正在嘗試使用Makefile來編譯位於src/code/*.cpp
.cpp
的一堆.cpp
文件,然后在build/
編譯每個*.o
,最后生成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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.