Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2762 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Définir un lot de variables dans un makefile

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Définir un lot de variables dans un makefile

n°1801399
matafan
Posté le 17-10-2008 à 13:45:34  profilanswer
 

Dans un Makefile j'ai une variable ${PRG_ROOTS} qui contient une liste de mots, par exemple :

PRG_ROOTS = toto titi tata


Je voudrais définir automatiquement un lots de variables dont les noms seront les mots définis dans ${PRG_ROOTS}, suffixés pas _32_OFILES et _64_OFILES. Donc dans l'exemple précédent je veux que 6 variables soient définies :

toto_32_OFILES = toto.o
titi_32_OFILES = titi.o
tata_32_OFILES = tata.o
 
toto_64_OFILES = toto.64o
titi_64_OFILES = titi.64o
tata_64_OFILES = tata.64o


Evidement je ne veux pas me palucher ces définitions à la main. Fonctionnellement ce que je veux c'est donc un truc du genre :

PRG_ROOTS = toto titi tata
.for i in ${PRG_ROOTS}
${i}_32_OFILES = ${i}.o
${i}_64_OFILES = ${i}.64o
.endfor


Mais évidement le problème c'est que .for/.endfor, ça n'existe pas. Est-ce que vous voyer un moyen de faire ça ?

mood
Publicité
Posté le 17-10-2008 à 13:45:34  profilanswer
 

n°1801405
Elmoricq
Modérateur
Posté le 17-10-2008 à 13:54:33  profilanswer
 

Y a peut-être moyen de ruser avec les targets *.o et *.64o ?
 

n°1801406
matafan
Posté le 17-10-2008 à 13:59:48  profilanswer
 

Le truc c'est qu'on ne peut pas définir de variable dans un target. Ce que je veux c'est vraiment définir ces variables *_OFILES. Elles ont un sens particulier dans l'environement dans lequel je suis. Il faut que je les définisse, et ensuite l'environement s'en sert pour faire les compils comme il faut.

n°1801408
Elmoricq
Modérateur
Posté le 17-10-2008 à 14:02:24  profilanswer
 

Ah. J'ai pas trop fait de makefile jusqu'ici, j'essaie de me tenir aussi loin que possible de cet outil de satan. :/

n°1802193
morph
Posté le 19-10-2008 à 23:17:31  profilanswer
 

$(eval) et $(foreach) doivent t'aider pour ce genre de problème
 
PRG_ROOT=tata toto titi
 
define Define_32OFILES
$(1)_32_OFILES = $(1).o
endef
 
define Define_64OFILES
$(1)_64_OFILES = $(1).64o
endef
 
$(foreach item,$(PRG_ROOT),$(eval $(call Define_32OFILES,$(item))))
$(foreach item,$(PRG_ROOT),$(eval $(call Define_64OFILES,$(item))))
 
all:
        echo ${tata_32_OFILES}
        echo ${tata_64_OFILES}
                           

n°1802322
matafan
Posté le 20-10-2008 à 12:49:19  profilanswer
 

Ah ah, ça me parrait une bonne idée, je vais essayer ça.

n°1802483
matafan
Posté le 20-10-2008 à 17:19:46  profilanswer
 

Bon ben j'ai l'impression que le make d'AIX ne connait ni ${function ni ${eval. Dommage parce que ça marche bien sous linux :(

n°1802500
Elmoricq
Modérateur
Posté le 20-10-2008 à 17:44:39  profilanswer
 

Regarde si t'as pas GNU make sur ta machine, il est quand même souvent installé (c'est le cas chez nous sur Solaris 8). Les make proprio c'est pas la panacée. :/

n°1802511
matafan
Posté le 20-10-2008 à 17:59:57  profilanswer
 

Oui mais ce n'est pas une solution envisageable pour moi. Je suis dans une environement de compilation un peu spécial, je ne peux pas pas utiliser les outils installés sur la machine... Seulement les outils présent dans l'environement de build.

n°1802520
Elmoricq
Modérateur
Posté le 20-10-2008 à 18:31:50  profilanswer
 

Je vois ce que tu veux dire. :/

mood
Publicité
Posté le 20-10-2008 à 18:31:50  profilanswer
 

n°1802595
morph
Posté le 20-10-2008 à 22:28:22  profilanswer
 

Alors dans ce cas, il faudrait génerer le makefile via un script.

n°1802607
sligor
Posté le 20-10-2008 à 23:03:34  profilanswer
 

un script qui l'on appellerait "configure"  [:idee]
 
Il faudrait que je fasse breveter cette invention  [:cerveau klem]


Message édité par sligor le 20-10-2008 à 23:04:32
n°1802615
Elmoricq
Modérateur
Posté le 20-10-2008 à 23:14:33  profilanswer
 

Ben s'il a une structure similaire à celle qu'on a chez nous, et vu sa réponse sur l'utilisation de gmake c'est probable, il peut même pas. :/

n°1802717
matafan
Posté le 21-10-2008 à 10:42:26  profilanswer
 

Non, je ne peux pas :)

n°1805060
matafan
Posté le 27-10-2008 à 17:07:05  profilanswer
 

J'ai trouvé l'équivalent de ${foreach var, macro, expr} avec le make d'AIX : c'est ${macro:@var@expr@}. Il ne me manque plus que l'équivalent du eval, si quelqu'un connait... Mais en fait je ne suis pas sûr que ça existe.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Définir un lot de variables dans un makefile

 

Sujets relatifs
Est-ce possible de créer des variables globales dans une fonction ?somme si et ranges variables
Variables et sous-scriptsproblèmes de sessions et de variables [- soucis Mis à Jour -]
Définir Code boutons dans une boucle ?[Problème] Static linking dans un makefile
transfert variables flash->php[Résolu] - Sessions bizarres, pertes des variables
Cygwin makefile erreur[linux] Définir variables d'environnement dans Makefile
Plus de sujets relatifs à : Définir un lot de variables dans un makefile


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)