Makefile:从目录编译到另一个目录

标签 makefile

我正在尝试使用 Makefile 编译一堆 .cpp文件位于 src/code/*.cpp ,然后编译每个 *.obuild/ , 最后用 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)

关于Makefile:从目录编译到另一个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16924333/

相关文章:

perl - 如何从 makefile 运行 Perl one liner?

linux - 生成文件: executing a multiline function not working

makefile - 配方更改后如何重建

Cmake : file is not copying

makefile - 为什么 make 提示循环依赖?

c++ - 使用自定义 makefile 在 Nao 机器人上编译模块

makefile - 用户定义函数内的GNU make条件函数$(if…)始终计算为true

c - make---linux和windows格式

c - 合并其他 .c 文件时 Makefile 返回错误

linux - 谁能给我解释一下这个 makefile 示例吗?