Makefile引用依赖与patsubst还是通配符?

时间:2019-01-15 09:40:21

标签: makefile dependencies wildcard

以下question and my answer及其评论后面,我对此表示怀疑。

#4848684 中引用依赖项的正确方法是什么?

让我举一个考虑此文件的示例:

Makefile

我可以做CXX = g++ CXXFLAGS = -stdlib=libc++ -std=c++17 WARNING := -Wall -Wextra PROJDIR := . SOURCEDIR := $(PROJDIR)/ SOURCES := $(wildcard $(SOURCEDIR)/*.cpp) OBJDIR := $(PROJDIR)/ OBJECTS := $(patsubst $(SOURCEDIR)/%.cpp,$(OBJDIR)/%.o,$(SOURCES)) DEPENDS := $(patsubst $(SOURCEDIR)/%.cpp,$(OBJDIR)/%.d,$(SOURCES)) # .PHONY means these rules get executed even if # files of those names exist. .PHONY: all clean all: main clean: $(RM) $(OBJECTS) $(DEPENDS) main clean: $(RM) $(OBJECTS) $(DEPENDS) parking # Linking the executable from the object files main: $(OBJECTS) $(CXX) $(WARNING) $(CXXFLAGS) $^ -o $@ #include your dependencies -include $(DEPENDS) #create OBJDIR if not existin (you should not need this) $(OBJDIR): mkdir -p $(OBJDIR) $(OBJDIR)/%.o: $(SOURCEDIR)/%.cpp Makefile | $(OBJDIR) $(CXX) $(WARNING) $(CXXFLAGS) -MMD -MP -c $< -o $@ ,也可以做DEPENDS := $(patsubst $(SOURCEDIR)/%.cpp,$(OBJDIR)/%.d,$(SOURCES)):可以吗?

如果我在运行DEPENDS := $(wildcard $(OBJDIR)/*.d)之前删除了源文件,则会保留对应的依存文件。在第二种情况下,它将与下一个make clean一起删除,而在第一种情况下,则不会被删除。但是,如果我不运行make clean,则可能会包含与源无关的依赖项。

make clean中引用依赖项的最佳方法是什么?我是否应该使用两个变量,一个运行Makefile,另一个运行clean

0 个答案:

没有答案