2010-08-17 16 views
0

J'utilise GNU Make pour construire un projet multi-répertoire. Ma question est comment puis-je utiliser makefile unique pour construire plusieurs appareils? par exemple. Mon application doit fonctionner sur divers appareils mobiles X, Y, Z ayant chacun des propriétés différentes comme la taille d'écran, le type de clavier, la version de la plate-forme, etc. Je dois passer make -f <makefilename> <targetname>. Ici, targetname peut être un nom de périphérique et un modèle comme Samsung CorbyPlus, mais mon makefile doit aller à un nom de répertoire particulier de samsung et ouvrir le fichier .txt ou alors où toutes les propriétés ci-dessus sont définies. Je dois tous les lire pendant la compilation et accéder à mon code via des macros/definitions/flags.Comment lire un fichier à partir de Makefile?

Quelqu'un peut-il suggérer comment faire cela? Une meilleure solution pour mon exigence sera appréciée.

Répondre

1

Je suggérerais d'utiliser des fichiers makefiles de configuration. Par exemple, supposons que vous avez plusieurs appareil avec ses configurations:

config_device1.mk

OPTION1=yes 
OPTION2=0 

config_device2.mk

OPTION1=no 
OPTION2=1 

Ensuite, vous pouvez les inclure dans certaines conditions makefile de base à l'aide paramètre spécial passé à partir de la ligne de commande (make -f makefile DEVICE = dev_type1) et utilisez opt ions à partir de fichiers de configuration et les traiter:

makefile

ifeq ($(DEVICE),dev_type1) 
include $(CONFIG_PATH)/config_device1.mk 
endif 

ifeq ($(DEVICE),dev_type2) 
include $(CONFIG_PATH)/config_device1.mk 
endif 

ifeq ($(OPTION1),yes) 
CFLAGS += -DBUILD_OPTION1  
endif 

CFLAGS += -DBUILD_OPTION2=$(OPTION2) 

BTW, pour une perspective à long (si vous n'avez pas de temps maintenant), il est préférable d'utiliser une partie du système de construction existants, lire son manuel et s'en tenir à sa méthodologie.

+0

Sans les fonctions 'ifeq', vous pouvez utiliser une convention de dénomination:' include $ (CONFIG_PATH)/config _ $ (DEVICE) .mk' par exemple. –

+0

Merci. Bon, c'est juste un exemple et tout dépend de l'environnement de construction, de l'architecture, des conventions utilisées dans un projet (qui devrait être développé et suivi par tous les participants) – pmod

+0

Quelqu'un peut-il me dire comment porter la valeur macro/variable/drapeau affectée? dans makefile à mon code? par exemple. dans l'extrait ci-dessus si j'affecte SCREENSIZE = 17X220 et que je veux prendre cette valeur de macro SCREENSIZE dans mon code, comment puis-je? Parce que reste else 0/1, les valeurs true/false sont généralement vérifiées dans le code via #ifdef ou #ifndef etc .. seulement. – Aahna