【发布时间】:2021-04-02 04:16:13
【问题描述】:
我在使用 Makefile 生成 .o 到“src/build”时遇到了一些困难。下面是我的结构。
Project
├── include
│ └── Solution.hpp
└── src
├── bin
│ └──
├── build
│ └──
├── Makefile
├── Solution.cpp
└── main.cpp
我要做的是在 src/build 文件夹下生成 main.o 和 Solution.o,然后在 src/bin 下生成可执行文件“test”。运行我的 Makefile 后,我在 src/build 中获得了 main.o,但在 src 中获得了 Solution.o。我不确定为什么?变量 OBJDIR 和 BINDIR 应该设置目标的位置,对吗?如果我删除 $(OBJECTS),一切正常。为什么我不能将所有 .o 文件输出到 src/build 有什么帮助吗?
ROOTDIR ?= ..
BINDIR := bin
OBJDIR := build
INCLUDEDIR := $(ROOTDIR)/src $(ROOTDIR)/include
CXX := g++
CCFLAGS := -c -g -O2 -Wall -std=c++17
LINKFLAGS :=
SOURCES := main.cpp Solution.cpp
OBJECTS := $(SOURCES:.cpp=.o)
EXECUTABLE := test
OBJSUFFIX := .o
all : $(BINDIR)/$(EXECUTABLE)
makedirs :
@if test ! -d $(BINDIR); then mkdir $(BINDIR); fi
@if test ! -d $(OBJDIR); then mkdir $(OBJDIR); fi
## Link ##
$(BINDIR)/$(EXECUTABLE) : $(OBJDIR)/$(OBJECTS)
$(CXX) $(LINKFLAGS) -o $@ $^
## Compile ##
$(OBJDIR)/%.o : %.cpp makedirs
$(CXX) $(CCFLAGS) $< -o $@
clean :
rm -rf $(BINDIR) $(OBJDIR) *.o
【问题讨论】: