【问题标题】:Set Makefile to build in another directory将 Makefile 设置为在另一个目录中构建
【发布时间】:2016-03-03 04:06:54
【问题描述】:

假设我的 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)

请帮忙 谢谢!

【问题讨论】:

标签: c++ makefile


【解决方案1】:

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

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)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多