[linux] Définir variables d'environnement dans Makefile

Définir variables d'environnement dans Makefile [linux] - C - Programmation

Marsh Posté le 15-03-2005 à 14:31:07    

Bonjour,  
je souhaite pouvoir paramétrer un chemin vers un répertoire en variable d'environnement. En effet, mon application fait un getenv du nom de la variable pour connaitre le répertoire de travail. Ca j'y arrive, pas de problème.
 
Par contre, je n'arrive pas à faire en sorte que mon makefile assigne la valeur à ma variable d'environnement.
Disons que dans le shell, si je fais :
export NOM_DE_MA_VAR="chemin_de_ma_var"
Ca marche nickel, en faisant env dans le shell, je vois bien apparaitre ma variable d'environnement avec la bonne valeur.  
Cependant si je place la ligne :
export NOM_DE_MA_VAR="chemin_de_ma_var"dans mon makefile (pour le make all), ben la ligne est bien appellée, mais elle n'a pas d'effet, sur la variable en question ... ? Y'a-t-il un truc que je n'aurais pas compris ?
 
Merci d'avance.

Reply

Marsh Posté le 15-03-2005 à 14:31:07   

Reply

Marsh Posté le 15-03-2005 à 14:40:45    

Euh ... je réalise que "export" est une commande propre au shell bash ... connaissez-vous un moyen générique d'assigner une variables d'environnement (possiblement déjà existante) dans un makefile ?
 
Toute aide serait vraiment appréciée. merci d'avance !

Reply

Marsh Posté le 15-03-2005 à 14:44:49    

on va faire comme si j'avais rien lu.
 
strcmp retourne une valeur < 0, == 0 ou > 0
 
strcpy(a, b) retourne a

Reply

Marsh Posté le 15-03-2005 à 14:48:52    

comprend pas ou tu veux en venir ?

Reply

Marsh Posté le 15-03-2005 à 14:49:40    

ooops

Reply

Marsh Posté le 15-03-2005 à 14:50:44    

Allez Taz, je sais que tu connais la réponse à ma question ;)

Reply

Marsh Posté le 15-03-2005 à 14:51:37    

make != bash

Reply

Marsh Posté le 15-03-2005 à 14:52:50    

... bon je vois que t'es pas disposé à m'aider ... tant pis :( ... quelqu'un d'autre ? Merci !

Reply

Marsh Posté le 15-03-2005 à 14:53:56    

l'export de make, c'est uniquement pour des sub-make

Reply

Marsh Posté le 15-03-2005 à 14:54:57    

OK, mais un make, il doit bien pouvoir définir la valeur d'une variable d'environnement ?

Reply

Marsh Posté le 15-03-2005 à 14:54:57   

Reply

Marsh Posté le 15-03-2005 à 15:00:36    

pour faire quoi ?

Reply

Marsh Posté le 15-03-2005 à 15:02:29    

Tu definis des variables de compilation ou le linkage, etc,  utilisables dans ton make pas des veriables d'environnement

Reply

Marsh Posté le 15-03-2005 à 15:13:15    

Zuuut  
 
En fait, le but, c'est de pouvoir lancer mon application de n'importe ou. Mon application doit aller chercher un fichier. Donc dans l'appli, je fais get_env pour connaitre la racine du projet, puis j'ajoute le chemin relatif vers le fichier ... vous voyez ?
 
Du coup est-ce que je peux faire ca avec des variables de compilation ? Est-ce que si dans mon Makefile j'écris :
MON_PATH = "/home/moi/projet"
 
je peux ensuite faire dans mon code :
sprintf(str, "%s/chemin_relatif_vers_fichier", MON_PATH);
 
 
afin d'avoir str="/home/moi/projet/chemin_relatif_vers_fichier" ?


Message édité par allawos le 15-03-2005 à 15:14:18
Reply

Marsh Posté le 15-03-2005 à 15:19:33    

Maintenant tu arretes ou je demande a TAZ de venir avec sa planche à clous.
si tu veux utiliser des constantes dans tes lignes de codes, tu les definis dans ton source et pas dans le makefile.
Et par pitié documente toi sur ce qu'est un makefile et un fichier source en c

Reply

Marsh Posté le 15-03-2005 à 15:42:06    

ouais bon ... (no comment) :
 
2 solutions à mon problème :
 
1 ------- (variables de compilation)
 
Dans makefile, rajouter dans la ligne de compilation du fichier :
-DMON_PATH=\"/home/moi/projet\"   (les \ permettent de garder les " ).
 
puis dans l'application :
sprintf(str,"%s/chemin_relatif_vers_fichier", MON_PATH);
 
--> cette solution fonctionne mais implique que le chemin absolu de la racine est fixé par la compilation.
 
2 ------- (variables d'environnement)
 
Dans l'application, faire :
sprintf(str,"%s/chemin_relatif_vers_fichier", getenv("MON_PATH" ));
 
puis avant de lancer l'application, il faut définir la variable d'environnement MON_PATH. Ceci dépend alors du shell utilisé. Je pense que sous bash, ca donne :
export MON_PATH="/home/moi/projet"
 
--> cette solution permet de ne pas avoir à recompiler l'application si on déplace tous les fichiers (code+executables) dans un nouveau répertoire. Il faut simplement mettre à jour la variable d'environnement.

Reply

Sujets relatifs:

Leave a Replay

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