簡體   English   中英

Makefile:從目錄編譯到另一個目錄

[英]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))

此外,你應該在任何地方使用SOURCEDIRBUILDDIR ,而不僅僅是在某些地方(否則你會得到不一致)。 最后,您的SOURCEDIR值是錯誤的:它不應該以/我期望開頭:

SOURCEDIR = src/code

SOURCES = $(wildcard $(SOURCEDIR)/*.cpp)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM