如何为结构化文件系统编写Makefile

时间:2016-07-09 13:41:12

标签: c++ makefile

我试图学习如何为我的项目编写makefile。鉴于我使用了文本编辑器,如sublime-text和终端。

我知道如何编写一个makefile来编译单个文件及其相关的头文件,如果所有文件都在同一目录中。

想象一下,我们有一个目录和一些子目录,结构如下:

Reduce(`&`, xlist) 包含所有Headers个文件.h是保存Objects个文件的目录,.o是包含源代码的目录{ {1}} Sources位于顶级目录中。

.cpp

我试图按照GNU makethis post的答案整理Makefile

目前我的Makefile看起来像这样:

.
├── Headers
│   └── function.h
├── Makefile
├── Objects
│   └── main.o
└── Sources
    ├── function.cpp
    └── main.cpp

执行Makefile时会产生以下错误

INC_DIR = Headers
SRC_DIR = Sources
OBJ_DIR = Objects
CXXFLAGS = -c -Wall -I.
CC = g++

SRCS = $(SRC_DIR)/*.cpp 
OBJS = $(OBJ_DIR)/*.o

DEPS = $(INC_DIR)/*.h

output: $(OBJ_DIR)/main.o $(OBJ_DIR)/function.o
    $(CC) $^ -o $@

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(DEPS)
    $(CC) $(CXXFLAGS)  $< -o $@

clean: 
    rm $(OBJ_DIR)/*.o output

我知道我做错了什么但却无法弄清楚是什么以及如何解决它。

我很感激任何帮助和指导。

1 个答案:

答案 0 :(得分:3)

Headers添加到CXXFLAGS

 CXXFLAGS = -c -Wall -I. -IHeaders
                       # ^^^^^^^^^ 

此外,您可能希望使用GCC的-M<x>选项系列生成标头依赖项,并将这些依赖项包含在Makefile中。

以下是GNU make文档中该技术的一个很好的解释:

4.14 Generating Prerequisites Automatically

更多信息也可以在这里找到:

Makefile (Auto-Dependency Generation)