c++ - 设置Makefile在另一个目录中构建

标签 c++ makefile

假设我的 Makefile 与源位于同一目录中,我想将目标文件存储在 obj/子目录中,将目标可执行文件存储在 bin/子目录中。

src/
    main.cpp 
    test.cpp
    test.h
    /many other *.cpp files and headers/ 
    Makefile
    obj/
    bin/

我的 Makefile 的问题是我无法获取 OBJECTS 变量 包含 *.o 文件列表,其名称与 *.cpp 文件相同,但位于 OBJDIR 子目录中。

目前,只有当我将所有目标文件一一命名时,它才有效。

CXX=g++
CXXFLAGS=-c -Wall 
LDFLAGS=
SOURCES=$(wildcard *.cpp) # very convenient wildcard
BINDIR=bin
OBJDIR=obj
OBJECTS=$(OBJDIR)/main.o $(OBJDIR)/test.o # how do I make a wildcard here?
TARGET=$(BINDIR)/my_executable

all: $(SOURCES) $(TARGET)

$(TARGET): $(OBJECTS)
    $(CXX) $(LDFLAGS) $(OBJECTS) -o $@

$(OBJECTS): $(OBJDIR)/%.o: %.cpp
    $(CXX) $(CXXFLAGS)  -c $< -o $@

clean:
    rm -rf $(OBJDIR)/$(OBJECTS) $(BINDIR)/$(TARGET)

请帮忙 谢谢!

最佳答案

此网站上已经存在与您类似的问题:

Can I compile all .cpp files in src/ to .o's in obj/, then link to binary in ./?

无论如何,这样的事情应该可以解决您的问题:

OBJ_FILES := $(addprefix obj/,$(notdir $(CPP_FILES:.cpp=.o)))

关于c++ - 设置Makefile在另一个目录中构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33983060/

相关文章:

c - 从 Makefile 将变量导入 C 程序

Makefile 在定义中扩展变量

c++ - 有没有办法为每次使用 make 命令时运行程序的 c++ 生成文件?

linux - makefile 中的虚假目标

C++:字符串流到 vector

c - 如何理解和修复为嵌入式系统编译 Linux 内核时出现的错误

c++ - 窃取一个窗口到 CreateWindow 窗口创建一个 "frozen"窗口?

c++ - 将唯一指针 vector 复制到新 vector 中

c++ - 不能使用预处理器语句禁止标准函数吗?

c++ - 我可以在设置期望后复制一个谷歌模拟对象吗?