1
Need a makefile dependency rule that can handle missing files给出了关于如何处理删除的源文件以生成.o文件的一些指示。我使用的是gcc/g ++,因此在生成依赖关系时添加-MP选项对我来说很好,直到我到达链接阶段并使用我的.a文件...Makefile选项/规则处理丢失/删除的源文件
如何在输入源时更新归档/库走开?这对我来说工作正常,但是有没有更简洁的方法(即,像g ++ -MP选项一样简单)?
#BUILD_DIR is my target directory (includes Debug/Release and target arch)
#SRC_OUTS are my .o files
LIBATLS_HAS = $(shell nm ${BUILD_DIR}/libatls.a | grep ${BUILD_DIR} | sed -e 's/.*(//' -e 's/).*://')
LIBATLS_REMOVE = $(filter-out $(notdir ${SRC_OUTS}), ${LIBATLS_HAS})
${BUILD_DIR}/libatls.a: ${BUILD_DIR}/libatls.a(${SRC_OUTS})
ifneq ($(strip ${LIBATLS_REMOVE}),)
$(AR) -d [email protected] ${LIBATLS_REMOVE}
endif
更新初步反馈后执行以下操作:
LIBATLS_HAS := $(shell $(AR) t ${BUILD_DIR}/libatls.a)
LIBATLS_REMOVE := $(filter-out $(notdir ${SRC_OUTS}), $(filter %.o,${LIBATLS_HAS}))
.PHONY: clean_archive
clean_archive:
$(AR) -d $(BUILD_DIR)/libatls.a $(LIBATLS_REMOVE)
.PHONY: $(LIBATLS_REMOVE)
$(LIBATLS_REMOVE): clean_archive
${BUILD_DIR}/libatls.a: % : %(${SRC_OUTS}) ${LIBATLS_REMOVE}
感谢您的反馈意见。我仍然希望以更直接的方式。 :)这似乎是一个普遍的问题。 我喜欢nm | grep | sed上的“$(AR)t”。我必须过滤存档的目录(下面的过滤器%.o)。 第二个版本应该使用LIBATLS_REMOVE,是否正确? 使用组合版本更新以上版本。 – b3nj1 2010-05-17 20:04:18
@ b3nj1:我不认为有一种更直接的方式,不涉及危险的黑客行为。人们可以制作Make的功能列表,但Make可以真正干净地处理这个问题的Make是一种通用语言。 – Beta 2010-05-18 00:08:07