我已经学习C++几个月了,只需使用编辑器和我的终端来编译和运行我的程序。但是我认为我的项目需要更正式一些,所以我正在尝试学习如何构建适当的项目文件结构以及如何使用 Make。
目前,我正在使用GNU Make 4.1。但是我在使用 Make 创建对象文件时遇到问题,收到错误:
make: *** No rule to make target 'build/%.o', needed by 'main'. Stop.
我一直在寻找解决方案,但到目前为止都没有奏效。
这是我的制作文件:
# 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 $@ $^