.cpp 到 Makefile 中的 .o 文件

use*_*190 2 makefile

如何使用 Makefile 生成与目录中所有 .cpp 文件相对应的 .o 文件?我有一个包含 .cpp 文件的目录。现在,我想在 .o 文件中编译它们。.o 文件的名称应与相应的 .cpp 文件相同。我该怎么办?

实际上,我已经有了一个实现,但我不确定它是如何工作的

SRCS := $(wildcard $(SRCDIR)/*.cpp)
OBJS := $(SRCS:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)

$(OBJS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp
            // Recipe //
Run Code Online (Sandbox Code Playgroud)

Sag*_*kre 5

尝试这个

SRCS=$(wildcard *.cpp)
OBJS=$(SRCS:.cpp=.o )

%.o: %.cpp 
   $(CC) -c $< -o $@
Run Code Online (Sandbox Code Playgroud)

让我添加一些更多的解释。

SRCS := $(wildcard $(SRCDIR)/*.cpp)- 它将列出目录下的所有 .cpp 文件SRCDIR并将分配给SRCS

OBJS := $(SRCS:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)- 它将上面语句中列出的所有带有 .cpp 的文件替换为.oex:main.cpp将更改为main.o并分配给 OBJS

$(OBJDIR)/%.o : $(SRCDIR)/%.cpp- 目标文件取决于各自的.cpp文件,在规则中您可以编写规则来创建目标文件

%字符可用于通配符模式匹配,以提供通用目标。例如:

%.o: %.c
[TAB] actions
Run Code Online (Sandbox Code Playgroud)

%出现在依赖项列表中时,它被替换为用于在目标中执行替换的相同字符串。

如果上面的解释不清楚,只需阅读 Makefile Basics 一次,尝试在不使用特殊变量的情况下编写,然后转到复杂的规则。