我试图学习如何为我的项目编写makefile。鉴于我使用了文本编辑器,如sublime-text和终端。
我知道如何编写一个makefile来编译单个文件及其相关的头文件,如果所有文件都在同一目录中。
想象一下,我们有一个目录和一些子目录,结构如下:
Reduce(`&`, xlist)
包含所有Headers
个文件.h
是保存Objects
个文件的目录,.o
是包含源代码的目录{ {1}} Sources
位于顶级目录中。
.cpp
我试图按照GNU make和this 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
我知道我做错了什么但却无法弄清楚是什么以及如何解决它。
我很感激任何帮助和指导。
答案 0 :(得分:3)
将Headers
添加到CXXFLAGS
:
CXXFLAGS = -c -Wall -I. -IHeaders
# ^^^^^^^^^
此外,您可能希望使用GCC的-M<x>
选项系列生成标头依赖项,并将这些依赖项包含在Makefile中。
以下是GNU make文档中该技术的一个很好的解释:
4.14 Generating Prerequisites Automatically
更多信息也可以在这里找到: