[Make + Bash] @%$# de parentheses :)

@%$# de parentheses :) [Make + Bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 30-03-2009 à 13:29:50    

Salut les gens,
 
J'ai un probleme lamentable avec des parentheses qui disparaissent...  
 
Explications: le projet necessite qu'une fonction interne a gcc soit redefinie ce qui se fait avec une macro. Exemple:

Code :
  1. gcc -D "macro = ciel, mon mari" monprojet.c


 
Jusque la, pas de problemes. Mais... lorsque je veux sauver la commande dans un fichier "build.cmd", les parentheses qui protege la macro degagent et je rotis sur les piques de Satan. Exemple de contenu de build.cmd:

Code :
  1. gcc -D macro = ciel, mon mari monprojet.c


 
Ca a l'air con comme ca hein? Ben ouais... Et pourtant... Merci a toi si tu sais regler ca  :??:  
 
 
voici le Makefile (simplifie)
-------------------------
 

Code :
  1. FLAGS = -D "macro = ciel, mon mari"
  2. all:
  3.      echo gcc ${FLAGS} monprojet.c > build.cmd
  4.      gcc ${FLAGS} monprojet.c


Reply

Marsh Posté le 30-03-2009 à 13:29:50   

Reply

Marsh Posté le 30-03-2009 à 13:44:28    

Code :
  1. FLAGS = "-D 'macro=ciel, mon mari'"
 

ou si tu préféres, tout en double quote :

Code :
  1. FLAGS = "-D \"macro=ciel, mon mari\""


Message édité par fighting_falcon le 30-03-2009 à 13:44:57
Reply

Marsh Posté le 30-03-2009 à 14:03:19    

Okay, il y a deux idees la:
A) Entourer le tout de doubles quotes (possibilitee A1) ou non (possibilite A2)
B) Remplacer les doubles quotes internes par simples quotes (possibilitee B1) ou par des doubles quotes protegees (possibilitee B2)
 
Ok, je viens d'essayer les quatres possibilitees resultantes et aucune ne marche:
 
A1 B1 : "Command-line error"
A1 B2 : "Command-line error"
A2 B1 : les quotes degagent dans le fichier
A2 B2 : "syntax error"
 
Donc heu... non :)


Message édité par Cytoplasm le 30-03-2009 à 14:07:08
Reply

Marsh Posté le 30-03-2009 à 16:03:52    

distrib, version, ton makefile complet toussa toussa ...
 
parce que perso, Debian Lenny, avec ton makefile "minimaliste" et mes soluces ça marche

Reply

Marsh Posté le 30-03-2009 à 19:17:54    


 
ok, en faisant des tests, je me suis rendu compte que ta version marchait sur le test mais que mon probleme etait legerement plus complique vu que il y avait une copie. Voici un exemple que j'arrive pas a faire marcher (mon main.c est n'importe quoi, en l'occurence un hello world):
 

Code :
  1. FLAGS = -O2 -D "PRINT(a)=print(a, 13)"
  2. ALLFLAGS = -msse2 ${FLAGS}
  3. all:
  4.     echo gcc ${ALLFLAGS} main.c > build.cmd
  5.     gcc ${ALLFLAGS} main.c

Reply

Marsh Posté le 31-03-2009 à 08:32:02    

FLAGS = "-o2 -D 'PRINT(a)=print(a, 13)'"

Reply

Marsh Posté le 31-03-2009 à 09:21:49    

mais heu... ca marche trop pas chez moi ca!
 

Code :
  1. echo gcc -msse2 "-O2 -D 'PRINT(a)=print(a, 13)'" main.c > build.cmd
  2. gcc -msse2 "-O2 -D 'PRINT(a)=print(a, 13)'" main.c
  3. cc1: error: invalid option argument '-O2 -D 'PRINT(a)=print(a, 13)''
  4. make: *** [all] Error 1

Reply

Marsh Posté le 31-03-2009 à 09:23:37    

[:prozac]
avant de te lancer dans tout un tas de choses que tu ne connais pas correctement, je pense que tu devrais lire un peu la doc correspondant aux scripts shells et aux makefiles :o


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 31-03-2009 à 09:41:23    

fighting_falcon, merci. Je viens de trouver qu'en combinant ta solution et en utilisant ". build.cmd" a la place d'appeler "gcc", ca marche nickel.
 
bonne journee a toi!

Reply

Sujets relatifs:

Leave a Replay

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