Требуется правило зависимостей make-файла, которое может обрабатывать отсутствующие файлы дает некоторые советы о том, как обрабатывать удаленные исходные файлы для генерации файлов .o. Я использую gcc / g ++, поэтому добавление опции -MP при генерации зависимостей прекрасно работает для меня, пока я не доберусь до стадии соединения с моим файлом .a ...
А как насчет обновления архивов / библиотек, когда источники ввода исчезают? Это работает нормально для меня, но есть ли более чистый способ (т. Е. Что-то такое же простое, как опция 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 $@ ${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}