如何使Makefile目标依赖于不同的路径?
我为这个模棱两可的标题道歉,由于我对GNU make缺乏了解,我想不出一个简单的表达方式 我正在为一个小项目编写一个简单的Makefile,并试图通过使用对象的基本名称(不带路径)作为目标,使其能够生成单个对象:如何使Makefile目标依赖于不同的路径?,makefile,gnu-make,Makefile,Gnu Make,我为这个模棱两可的标题道歉,由于我对GNU make缺乏了解,我想不出一个简单的表达方式 我正在为一个小项目编写一个简单的Makefile,并试图通过使用对象的基本名称(不带路径)作为目标,使其能够生成单个对象: $(BASE_OBJS) : %.o : $(SRC_DIR)/%.c $(OBJDIR) $(INCLUDES) @echo $(CC): [$(notdir $<)] '->' [$(notdir $@)]
$(BASE_OBJS) : %.o : $(SRC_DIR)/%.c $(OBJDIR) $(INCLUDES)
@echo $(CC): [$(notdir $<)] '->' [$(notdir $@)]
@$(CC) -c $< $(CFLAGS) -o $(OBJDIR)/$@
您的主要目标和先决条件集必须使用完整路径,因为make就是这样工作的。所以你必须有这样的东西:
$(OBJS) : $(OBJDIR)/%.o: $(SRC_DIR)/%.c $(INCLUDES)
@echo $(CC): [$(notdir $<)] '->' [$(notdir $@)]
@$(CC) -c $< $(CFLAGS) -o $@
$(BASE_OBJS) : %.o : $(OBJDIR)/%.o
“我正试图通过使用它们的基本名称(没有路径)作为目标来生成单个对象。”我知道每次都会重建目标,我发布了我的问题,以了解是否有办法防止它发生。关于误用:这是我的第一个想法,但后来我回忆起,例如Linux内核构建系统允许从主文件夹按名称构建*.dtb文件,而无需进行不必要的重建,我认为这是可能的。
$(OBJS) : $(OBJDIR)/%.o: $(SRC_DIR)/%.c $(INCLUDES)
@echo $(CC): [$(notdir $<)] '->' [$(notdir $@)]
@$(CC) -c $< $(CFLAGS) -o $@
$(BASE_OBJS) : %.o : $(OBJDIR)/%.o