现在,我已经通过使用编辑器和终端来编译和运行程序来学习C ++。但是我发现我的项目需要更加正式,因此我正在尝试学习如何构建适当的项目文件结构以及如何使用Make。
当前,我正在使用GNU Make 4.1。但是我无法使用Make创建目标文件,收到错误:
make: *** No rule to make target 'build/%.o', needed by 'main'. Stop.
我一直在寻找解决方案,但到目前为止没有一个工作。
这是我的makefile:
# Specify compiler
CC=gcc
# Specify linker
LINK=gcc
# Specify flags
CPPFLAGS = -Wall -g
# Specify directories
SRCDIR = ./src
OBJDIR = ./build
# Compile object files
$(OBJDIR)/%.o : $(SRCDIR)/%.cpp
$(CC) -c -o $@ $< $(CPPFLAGS)
# Compile object files into binary
main : $(OBJDIR)/%.o
$(CC) -o $@ $^
考虑最终规则...
# Compile object files into binary
main : $(OBJDIR)/%.o
$(CC) -o $@ $^
[不幸的是$(OBJDIR)/%.o
并没有按照您要求的方式扩展。假设所有源文件都在$(SRCDIR)
中,则可以创建一个包含其名称的变量...
SRCFILES := $(wildcard $(SRCDIR)/*.cpp)
现在创建一个包含相应目标文件路径的变量...
OBJFILES := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRCFILES))
现在$(OBJFILES)
应该包含main
所依赖的目标文件路径的列表。所以最终的规则变成...
main: $(OBJFILES)
$(CC) -o $@ $^