Définir un lot de variables dans un makefile

Définir un lot de variables dans un makefile - C - Programmation

Marsh Posté le 17-10-2008 à 13:45:34    

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 ?

Reply

Marsh Posté le 17-10-2008 à 13:45:34   

Reply

Marsh Posté le 17-10-2008 à 13:54:33    

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

Reply

Marsh Posté le 17-10-2008 à 13:59:48    

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.

Reply

Marsh Posté le 17-10-2008 à 14:02:24    

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

Reply

Marsh Posté le 19-10-2008 à 23:17:31    

$(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}
                           

Reply

Marsh Posté le 20-10-2008 à 12:49:19    

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

Reply

Marsh Posté le 20-10-2008 à 17:19:46    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed

© 2018 Forum. All Rights Reserved.