|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : août 2007 Messages : 30 ![]() |
Bonjour,
Pour un projet multi-plateformes, nous avons un Makefile parametré. Grâce à du "ifeq", je reussis à obtenir des variables configurées pour une compilation Windows ou Linux. Cependant, ce fonctionnement est contraignant : Il oblige à definir une variable d'environnement, dans le fichier, ou exportée à partir du shell appelant, voire passee en ligne de commande à make. J'aimerais, si c'est possible, definir le contenu de plusieurs variables via des cibles .PHONY Voici un apperçu de ce que j'ai essayé (et qui ne marche pas), ce qui vous donnera une idée de ce que je souhaite faire : Code :
Après avoir galéré plusieurs heures, j'ai l'impression que cela n'est pas possible. En effet, les variables d'environnement semblent impossibles à modifier via les lignes de commandes. J'ai également essayé export, tenté de echo la valeur juste après mes tentatives de changements de valeurs, mais rien n'y fait, ces variables semblent refuser obstinément de changer de valeur via des lignes de commandes... Y'a-t'il une solution, ou est-il obligatoire d'utiliser des moyens détournés pour obtenir ce que je souhaite réaliser ? Merci par avance |
||
|
|
00
|
|
|
#2 | ||
|
Invité régulier
![]() Inscription : août 2007 Messages : 30 ![]() |
Bon, j'ai finalement réussi à obtenir, plus ou moins, l'effet souhaité, par une combinaison de definitions blindées par des "ifeq", et d'appels recursifs en passant un parametre de config en ligne de commande.
En gros : Code :
Cela dit, par curiosité, et parce que je me suis bien ennervé sur le problème avant de trouver ça, j'aimerais tout de même une réponse, si quelqu'un sait si, oui ou non, il est possible de définir les valeurs des variables dans les lignes de commandes dans le makefile (lignes executées pour construire une cible) ? |
||
|
|
00
|
|
|
#3 |
|
Membre émérite
![]() Inscription : mars 2005 Messages : 860 ![]() |
De souvenir, on peut passer une variable à make ainsi, non ?
Si tu veux te simplifier la vie avec les Makefiles multi-plateformes, je te conseille l'utilisation de CMake. Ce genre de choses est très simple à réaliser avec CMake. Un court example ici http://cmake.org/cmake/help/examples.html |
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : août 2007 Messages : 30 ![]() |
Merci pour la réponse, c'est en effet la technique que j'ai utilisé, mes cibles "linux" et "windows" se contentant d'appeler récursivement, et selon cette syntaxe, le makefile.
Je regrette juste que cela ne soit pas un peu plus proche d'un vrai langage de programmation, avec possibilité de redéfinir le contenu des variables à l'execution. |
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() |
D'un autre côté, si je me souviens bien, make détecte les appels récursifs, ce qui ferait de ça une technique "officielle" pour l'écriture de makefile...
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : août 2007 Messages : 30 ![]() |
Oui, tout à fait, il existe une variable MAKELEVEL qui est automatiquement incrementee a chaque invocation d'un sous-make.
Cela dit, j'aurais préféré que make se borne à un rôle de "lanceur de scripts" récursif, plutôt que de restreindre ainsi les commandes disponibles. |
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() |
Le pire exemple de récursivité que j'aie vu, ça reste quand même un programme de l'IOCCC, qui écrivait les "twelve days of christmas" uniquement par des appels récursifs de main(). Et les chaînes de caractères employées étaient cryptées.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#8 | ||
|
Invité régulier
![]() Inscription : juin 2010 Messages : 19 ![]() |
Salut,
Je me permets de relancer la discussion car j'ai repris la technique de kzwix, j'ai donc ceci : Code :
Le hic c'est que ça fonctionne sous linux mais pas sous mac os ou windows où j'obtiens : make: Nothing to be done for `windows'. Est-ce que j'ai loupé une étape ? |
||
|
|
10
|
|
|
#9 |
|
Invité régulier
![]() Inscription : juin 2010 Messages : 19 ![]() |
Ah j'ai trouvé mon erreur,
l'indentation n'était pas respectée au niveau des make all ... Il y avait une tab en trop Ca ne posait pas de problème sous linux mais sous windows et mac si. Sorry pour ces posts qui ne servent pas à grand chose. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com