2009-08-12 8 views
2

Nous utilisons la marque récursive dans notre projet. Nous utilisons également un compilateur intégré commercial (diab) avec une licence FlexLM.Utiliser make pour emprunter une licence de compilateur au serveur de licences?

Nous sommes en train d'ajouter l'emprunt de licence en tant que dépendance aux cibles de niveau supérieur dans chaque répertoire.

Comme ceci:

.PHONY: target 
target: borrow_compiler $(TARGETLIB) 
    $(RETURN_COMPILER) 

.PHONY : borrow_compiler 
borrow_compiler: 
    @$(BORROW_COMPILER) 300 

BORROW_COMPILER et RETURN_COMPILER sont des scripts qui acquiert la licence.

Notre problème est qu'il faut beaucoup de temps pour construire après un petit changement dû à la communication avec le serveur de licences pour chaque sous-répertoire récursif.

Y a-t-il une meilleure façon de procéder?

+0

Il est pas aussi facile que la mise en juste la dépendance à 'borrow_compiler' sur les fichiers objet, car cela remet la licence prématurément. –

Répondre

0

Que diriez-vous plutôt que de le faire dans le makefile, écrivez un wrapper de programme make qui emprunte d'abord la licence, puis appelle make avec des arguments, et après make retourne la licence? Vous pouvez vérifier dans le fichier makefile qu'une variable d'environnement spéciale est définie si vous voulez appliquer que le wrapper make soit utilisé.

+0

Mais je veux lancer make sans emprunter la licence, puis emprunter la licence uniquement si un fichier c/C++ doit être compilé. La licence ne doit en outre pas être renvoyée tant que tous les fichiers c/C++ n'ont pas été compilés. Hmm .. Peut-être qu'il est possible de détecter si make est appelé récursivement? Alors seulement le makefile supérieur devrait faire l'emprunt. –

+0

Vous pouvez également envisager de ne pas exécuter make récursivement, voir "Récursif Make Considered Nocif", http://miller.emu.id.au/pmiller/books/rmch/. – hlovdal

1

La solution était de regarder MAKELEVEL. Maintenant, la licence est seulement empruntée au top level make. Il est compris par tous les niveaux de makefiles:

ifeq ($(MAKELEVEL),0) 
    BORROW_COMPILER = python $(relativeToolPath)scripts/borrowCompilerLicence.py 
    RETURN_COMPILER = python $(relativeToolPath)scripts/returnCompilerLicence.py 
else 
    # true does nothing 
    BORROW_COMPILER = true 
    RETURN_COMPILER = 
endif