2013-08-05 1 views
0

Fiddling avec un système de construction principalement basé sur des Makefiles purs, je suis venu à la macro suivante pour le rendre facile à tester pour l'existence et définir une variable interne de chaque outil externe requis par le processus de construction.Méthode préférée pour tester les outils externes dans un Makefile

define tool-available 
    $(eval $(1) := $(shell which $(2))) 
    $(if $($(1)),$(info $(2) available at $($(1))),$(error error: missing tool $(2))) 
endef 

$(eval $(call tool-available,DOT,dot)) 
$(eval $(call tool-available,RBIN,R)) 
$(eval $(call tool-available,FIND,find)) 

Cependant, l'expérience a montré que ce n'est pas commun de le faire dans un makefile, avec la construction-systèmes tiers préfèrent généralement des scripts configure externes et d'autres mécanismes.

Outre le fait que le programme which (1) a une disponibilité limitée sur les plates-formes, y a-t-il de bonnes raisons de ne pas le faire dans un Makefile?

Répondre

0

Je ne suis pas entièrement sûr qu'il est utile de vérifier explicitement que l'outil est disponible comme votre système; Si le programme n'existe pas sur votre chemin, il va échouer avec une erreur "command not found", ce qui n'est pas ambigu, alors pourquoi perdre son temps à le vérifier explicitement?

La vérification de la présence de bibliothèques, d'un autre côté, me semble ajouter de la valeur. Si une bibliothèque est manquante, vous pouvez obtenir juste un 'fichier introuvable', sans indication de quelle bibliothèque provient de, mais même alors, un document clair sur la façon de configurer l'environnement de construction serait mieux; En fait, il est beaucoup plus facile de dire "c'est ce dont vous avez besoin pour construire ceci" que d'essayer de gérer tous les cas limites de systèmes étrangement configurés.

Notez que mes vues sont assez militantes à cet égard; Si quelqu'un n'a pas l'esprit de lire les instructions README ou BUILDING et de configurer leur environnement de façon appropriée, alors ils n'ont probablement pas d'affaires à faire pour le construire ... les gens de nature moins cynique peuvent vouloir prendre une ligne plus douce :)

Questions connexes