Need a makefile dependency rule that can handle missing files donne quelques conseils sur la façon de gérer les fichiers source supprimés pour générer des fichiers .o. J'utilise gcc/g ++, donc l'ajout de l'option -MP lors de la génération de dépendances fonctionne très bien pour moi, jusqu'à ce que j'arrive à la phase de liaison avec mon fichier .a ...Makefile option/règle pour gérer les fichiers source manquants/supprimés
Qu'en est-il de la mise à jour des archives/bibliothèques lorsque les sources d'entrée allez-vous en? Cela fonctionne bien pour moi, mais y a-t-il un moyen plus propre (c'est-à-dire quelque chose d'aussi simple que l'option 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
Mise à jour à ce qui suit après les premiers retours:
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}
Merci pour vos commentaires. J'espère toujours d'une manière plus directe. :) Il semble que ce serait un problème commun. J'aime "$ (AR) t" sur le nm | grep | sed. Je dois filtrer la table des matières de l'archive (filtre% .o ci-dessous). La deuxième version devrait utiliser LIBATLS_REMOVE, correct? Mise à jour ci-dessus avec la version combinée. – b3nj1
@ b3nj1: Je ne pense pas qu'il existe un moyen plus direct qui n'implique pas de piratage dangereux. On peut faire une liste de souhaits de fonctionnalités que Make pourrait avoir, mais un Make qui pourrait gérer ce problème très proprement serait un langage à usage général. – Beta