如何使用Makefile生成目录中所有.cpp文件对应的.o文件? 我有一个包含.cpp文件的目录。现在,我想在.o文件中编译它们。 .o文件的名称应与相应的.cpp文件相同。我该怎么办?
实际上,我已经有了一个实现,但我不确定它是如何工作的
SRCS := $(wildcard $(SRCDIR)/*.cpp)
OBJS := $(SRCS:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
$(OBJS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp
// Recipe //
答案 0 :(得分:3)
试试这个
SRCS=$(wildcard *.cpp)
OBJS=$(SRCS:.cpp=.o )
%.o: %.cpp
$(CC) -c $< -o $@
让我再加上一些解释。
SRCS := $(wildcard $(SRCDIR)/*.cpp)
- 它会列出SRCDIR
目录下的所有.cpp文件,并将分配给SRCS
OBJS := $(SRCS:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
- 它会将上述语句中列出的.cpp所有文件替换为.o
例如:main.cpp
将更改为main.o
并分配给OBJS < / p>
$(OBJDIR)/%.o : $(SRCDIR)/%.cpp
- 目标文件取决于各自的.cpp
文件,并且在规则中您可以编写规则来创建目标文件
%
字符可用于通配符模式匹配,以提供通用目标。例如:
%.o: %.c
[TAB] actions
当%
出现在依赖关系列表中时,它将替换为用于在目标中执行替换的相同字符串。
如果上述说明不清楚,只需仔细阅读Makefile Basics,尝试不使用特殊变量进行编写,然后转到复杂的规则。