2010-05-07 4 views
4

Y at-il un moyen de dire que si les prérequis pour la cible donnée n'existent pas alors ignorer cette cible?Makefile: ignore les prérequis si n'existe pas

Par exemple, je donne les résultats suivants stockés dans des dossiers

chrome_src_folders := $(chrome_src_folder)/content/* \ 
       $(chrome_src_folder)/locale/* $(chrome_src_folder)/skin/* 

C'est là que je l'utilise

$(jar_path): $(chrome_src_folders) 
    zip -urq $(jar_path) $(chrome_src_folders)  

Fondamentalement, la peau ou locale peut très bien ne pas être là, ce qui me donnera un belle erreur. Comment éviter cette erreur et rendre le chrome_src_folders obligatoire? ou devrais-je filtrer en quelque sorte chrome_src_folders et ne laisser que ceux qui existent?

Répondre

0

Deux pensées; Étant donné que les dossiers de l'habillage et des paramètres régionaux sont facultatifs, avez-vous besoin de les appeler en tant que dépendances? Laissez les commandes de construction prendre soin d'eux s'ils en ont besoin. Donc, quelque chose comme:

chrome_content_folder := $(chrome_src_folder)/content/* 
chrome_content_optional := $(chrome_src_folder)/locale/* $(chrome_src_folder)/skin/* 

$(jar_path): $(chrome_content_folder) 
    zip -urq $(jar_path) $(chrome_content_folder) $(chrome_content_optional) 

Si vous devez avoir les bons dossiers sur la ligne de dépendance, de sorte que vous attraper des erreurs, j'écrire des macros qui définissent quand et comment vous en avez besoin. Ensuite, mettez à jour vos cibles en conséquence pour ne demander que ces répertoires lorsque vous savez qu'ils sont requis.

3

Il existe plusieurs façons de procéder. le plus simple est de filtrer la liste en utilisant wildcard

chrome_src_folders := $(wildcard $(chrome_src_folder)/content/* \ 
    $(chrome_src_folder)/locale/* $(chrome_src_folder)/skin/*)