2009-08-25 6 views
3

Comment créer un fichier makefile fonctionnant sous AIX, Linux et SunOS et capable de fournir différentes options de compilation pour chaque environnement?Sections conditionnelles dans AIX Makefiles

J'ai accès à une variable d'environnement qui décrit le système d'exploitation, mais le AIX faire utilitaire ne pas comme ifeq, donc je ne peux pas faire quelque chose comme:

ifeq($(OS), AIX) 
    CFLAGS = $(CFLAGS) <IBM compiler options> 
endif 

Répondre

6

Vous pouvez utiliser une construction comme celle-ci:

CFLAGS_AIX =drapeaux AIX
CFLAGS_Linux =drapeaux Linux
CFLAGS_SunOS =drapeaux SunOS
CFLAGS = $(CFLAGS_$(OS))

+0

CFLAGS = $ (CFLAGS _ $ (OS)) sur mon système AIX. –

+0

@Leonardo: oui, corrigé. – mark4o

1

La portabilité d'un Makefile n'est pas directement lié au système d'exploitation, mais à la mise en œuvre de faire sur la plate-forme en question. (Il y a donc une relation indirecte en ce sens que l'implémentation de make peut être devinée (mais pas exactement) à partir du système d'exploitation.) En général, il s'agit d'un problème difficile pour lequel de nombreuses solutions ont été proposées. Vous pourriez vouloir regarder dans automake, qui va générer des fichiers makefiles portables pour vous. Cependant, la solution d'automake au problème de la définition de drapeaux pour unixix différent peut ne pas vous intéresser car la solution est (fondamentalement) "ne le faites pas". Plutôt que de définir des options basées sur la plate-forme, la philosophie consiste à déterminer quels drapeaux sont nécessaires en fonction des fonctionnalités fournies par l'hôte ou par l'utilisateur au moment de la configuration. Une solution commode autoconf/automake pour le problème de l'attribution des drapeaux basés sur la plate-forme est d'avoir un fichier distinct pour chacune de vos plates-formes qui attribue CFLAGS au moment de la configuration et de le spécifier dans la variable d'environnement CONFIG _ SITE de l'utilisateur en cours d'exécution configure. Vous pouvez attribuer CONFIG _ SITE dans le script de connexion de l'utilisateur en fonction de la plate-forme. (c'est-à-dire, éloignez le problème de configure/make et dans la configuration de connexion) Ceci rend l'assignation transparente pour l'utilisateur qui construit le logiciel. (transparent mais facilement surchargé).

+0

J'espère une solution plus simple que autoconf/automake – frankster

+0

Vous pouvez installer un v ersion de make sur toutes les machines. –

+0

Je contrôle uniquement certaines machines – frankster

Questions connexes