以下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
?