我正在以下列方式处理由不同文件夹组成的小型C ++项目
Project
|
|-src (several .cpp files here - that depend on their .hpp)
|-include (several .hpp files here)
|-test(various things, not really important)
|-bin
|-build
我想要做的是能够将我的目标文件(.o)放入“build”文件夹中,并且我想确保我的Output.exe进入“bin”。这样,当我“干净”时,我可以简单地“从构建中删除* .o”并“从bin中删除Output.exe”。
我已经阅读了一些解决方案,但它看起来并不像我能以任何方式工作。有人可以帮我解决这个问题吗?感谢
现在我想出了类似的东西:
CC = c++
INC_DIR = ./include
SRC_DIR = ./src
BUILD_DIR = ./build
CPPFLAGS = -Wall -Wfatal-errors -std=c++11
SRCS = $(shell find $(SRC_DIR) -name *.cpp)
DEPS = $(shell find $(IND_DIR) -name *.hpp)
OBJS = $(SRCS:%=$(BUILD_DIR)/%.o)
INC_FLAGS = -I $(INC_DIR) -I $(SRC_DIR)
CPPFLAGS = -Wall -Wfatal-errors -std=c++11
FLAGS = $(INC_FLAGS) $(CPPFLAGS)
$(BUILD_DIR)/%.o : %.cpp $(DEPS)
$(CC) -c -o $@ $< $(FLAGS)
.PHONY: clean
clean:
rm -rf $(BUILD_DIR)/*.o
当我输入“make”时,它表示 - rm -rf $(BUILD_DIR)/ * .o 这意味着他正在努力清理。问题是它甚至没有尝试编译
答案 0 :(得分:2)
您错过了最终制作目标bin/test.exe
。
就个人而言,我不太喜欢$(shell)
- 请参阅下面的解决方案。
SRC := $(wildcard src/*.cpp)
OBJ := $(patsubst src/%.cpp,build/%.o,$(SRC))
vpath %.cpp src
CC := g++
LD := g++
build/%.o: %.cpp
$(CC) -Iinclude -c $< -o $@
.PHONY: all clean
all: build bin bin/test.exe
bin/test.exe: $(OBJ)
$(LD) $^ -o $@
clean:
@rm -rf build/* bin/*