После этого вопроса и моего ответа и его комментариев у меня есть сомнения.
Как правильно ссылаться на зависимости в 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
, а другую для include
?