makefile - Makefile 使用 patsubst 或通配符引用依赖项?
问题描述
在这个问题和我的回答及其评论之后,我有疑问。
在 a 中引用依赖项的正确方法是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
与源无关的依赖项,则可能会包括在内。
在 a 中引用依赖项的最佳方法是Makefile
什么?我应该使用两个变量,一个用于运行clean
,另一个用于运行include
吗?
解决方案
推荐阅读
- disk.frame - 如何找出我的 disk.frame 使用了多少个工人?
- string - 杰克逊:反序列化字符串阅读器失败
- filemaker - 确定要在运行中粘贴到的表
- visual-studio - 无法发布到 Azure:Web 部署任务失败
- powerbi - 合计当前月份 + 2 AND 下个月 + 1 和之后的月份
- android - android x 设计依赖
- android - Android 上使用 WebGL 的顶点着色器工件
- android - 针对 Google Play 商店要求的 React-native targetSDKVersion
- python-3.x - 我正在尝试使用硒和美丽的汤来抓取网站
- python - 如何满足 Python 3 中 pdb 的安装要求并使用 pip install -e?