Makefile for starters(C ++)

时间:2018-01-27 11:46:52

标签: c++ makefile

我正在以下列方式处理由不同文件夹组成的小型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 这意味着他正在努力清理。问题是它甚至没有尝试编译

1 个答案:

答案 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/*