Définition d'un string dans un #define à la compilation
2 réponses
Guillaume GOURDIN
Bonjour à tous,
dans mon Makile, j'ai un trucs dy style :
CFLAGS+= -DFOO=$(shell blablabla)
Après, je veux faire :
std::string text( FOO );
Mais évidemment, ça ne marche pas, car FOO n'est pas considéré comme une
chaine de caractère. la question est donc : comment faire en sorte que
FOO soit considéré comme tel?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc Bourguet
Guillaume GOURDIN writes:
J'ai essayé CFLAGS+= -DFOO="$(shell blablabla)" Mais ça ne marche pas.
CFLAGS += -DFOO="$(shell echo Guillaume)"
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Guillaume GOURDIN <gourdin@liw.fr> writes:
J'ai essayé
CFLAGS+= -DFOO="$(shell blablabla)"
Mais ça ne marche pas.
CFLAGS += -DFOO="$(shell echo Guillaume)"
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
J'ai essayé CFLAGS+= -DFOO="$(shell blablabla)" Mais ça ne marche pas.
CFLAGS += -DFOO="$(shell echo Guillaume)"
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
James Kanze
On Sep 13, 11:32 am, Jean-Marc Bourguet wrote:
Guillaume GOURDIN writes:
J'ai essayé CFLAGS+= -DFOO="$(shell blablabla)" Mais ça ne marche pas.
CFLAGS += -DFOO="$(shell echo Guillaume)"
Je ne suis pas si sûr. Si le texte ne comporte pas d'éspaces, d'accord. (Mais on pourrait aussi se servir de l'opérateur # dans la source alors.) L'évaluation dépend aussi du shell qu'invoque make, et peut varier; avec bash: -DTOTO=""abc def"" fait que g++ remplace TOTO avec "abc def". Mais le make que j'utilise d'habitude (GNU make) n'invoque pas bash, mais le shell de Bourne, où ça ne marche pas. Et ça ne m'étonnerais pas que certains make sous Windows n'invoque pas de shell de tout. (Sous Windows, GNU make utilise la variable d'environement $SHELL, s'il est positionnée. Ce qui veut dire que dans les environements où je travaille, je risque d'avoir bash ou ksh sous Windows -- selon que j'utilise mSys ou UWin --, le shell de Bourne sous Unix, et bash en mode compatible, ce qui ressemble plutôt le shell de Bourne, sans être 100% identique non plus, sous Linux.) Je n'ai pas accès à un système Windows avec tout
Un essai rapide sous Linux, Solaris et Windows/CygWin, montre que -DTOTO='"abc def"' marche dans tous ces cas-ci. Mais c'est loin d'être exhaustif -- pour commencer, c'est GNU make 3.81 dans tous les cas, et mon shell interactif est bash sous Windows. (Mais s'il se sert de $(shell ...), je crois qu'on peut supposer GNU make.)
J'ai aussi un cas des mes scripts où j'invoque un script de shell pour invoquer le compilateur (mais seulement sous Windows l'invocation du compilateur dépend évidemment de la plateforme). Chaque invocation du shell, évidemment, enlève une couche de , ' ou ". (Dans mon cas, le script supplémentaire n'apparaît que sur certains plateformes, en plus.)
Enfin, s'il n'a pas de problème de l'invocation du compilateur à travers un script (ce qui est quand même assez exceptionnel), la solution la plus simple (et la plus portable) est probablement d'utiliser : CFLAGS += -DTOTO='$( shell ... )' dans le fichier de make, et puis quelque chose comme: #define SS( s ) # s #define S( s ) SS( s )
S( TOTO ) dans ses sources.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Sep 13, 11:32 am, Jean-Marc Bourguet <j...@bourguet.org> wrote:
Guillaume GOURDIN <gour...@liw.fr> writes:
J'ai essayé
CFLAGS+= -DFOO="$(shell blablabla)"
Mais ça ne marche pas.
CFLAGS += -DFOO="$(shell echo Guillaume)"
Je ne suis pas si sûr. Si le texte ne comporte pas d'éspaces,
d'accord. (Mais on pourrait aussi se servir de l'opérateur #
dans la source alors.) L'évaluation dépend aussi du shell
qu'invoque make, et peut varier; avec bash: -DTOTO=""abc def""
fait que g++ remplace TOTO avec "abc def". Mais le make que
j'utilise d'habitude (GNU make) n'invoque pas bash, mais le
shell de Bourne, où ça ne marche pas. Et ça ne m'étonnerais pas
que certains make sous Windows n'invoque pas de shell de tout.
(Sous Windows, GNU make utilise la variable d'environement
$SHELL, s'il est positionnée. Ce qui veut dire que dans les
environements où je travaille, je risque d'avoir bash ou ksh
sous Windows -- selon que j'utilise mSys ou UWin --, le shell de
Bourne sous Unix, et bash en mode compatible, ce qui ressemble
plutôt le shell de Bourne, sans être 100% identique non plus,
sous Linux.) Je n'ai pas accès à un système Windows avec tout
Un essai rapide sous Linux, Solaris et Windows/CygWin, montre
que -DTOTO='"abc def"' marche dans tous ces cas-ci. Mais c'est
loin d'être exhaustif -- pour commencer, c'est GNU make 3.81
dans tous les cas, et mon shell interactif est bash sous
Windows. (Mais s'il se sert de $(shell ...), je crois qu'on peut
supposer GNU make.)
J'ai aussi un cas des mes scripts où j'invoque un script de
shell pour invoquer le compilateur (mais seulement sous
Windows l'invocation du compilateur dépend évidemment de la
plateforme). Chaque invocation du shell, évidemment, enlève une
couche de , ' ou ". (Dans mon cas, le script supplémentaire
n'apparaît que sur certains plateformes, en plus.)
Enfin, s'il n'a pas de problème de l'invocation du compilateur à
travers un script (ce qui est quand même assez exceptionnel), la
solution la plus simple (et la plus portable) est probablement
d'utiliser :
CFLAGS += -DTOTO='$( shell ... )'
dans le fichier de make, et puis quelque chose comme:
#define SS( s ) # s
#define S( s ) SS( s )
S( TOTO )
dans ses sources.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
J'ai essayé CFLAGS+= -DFOO="$(shell blablabla)" Mais ça ne marche pas.
CFLAGS += -DFOO="$(shell echo Guillaume)"
Je ne suis pas si sûr. Si le texte ne comporte pas d'éspaces, d'accord. (Mais on pourrait aussi se servir de l'opérateur # dans la source alors.) L'évaluation dépend aussi du shell qu'invoque make, et peut varier; avec bash: -DTOTO=""abc def"" fait que g++ remplace TOTO avec "abc def". Mais le make que j'utilise d'habitude (GNU make) n'invoque pas bash, mais le shell de Bourne, où ça ne marche pas. Et ça ne m'étonnerais pas que certains make sous Windows n'invoque pas de shell de tout. (Sous Windows, GNU make utilise la variable d'environement $SHELL, s'il est positionnée. Ce qui veut dire que dans les environements où je travaille, je risque d'avoir bash ou ksh sous Windows -- selon que j'utilise mSys ou UWin --, le shell de Bourne sous Unix, et bash en mode compatible, ce qui ressemble plutôt le shell de Bourne, sans être 100% identique non plus, sous Linux.) Je n'ai pas accès à un système Windows avec tout
Un essai rapide sous Linux, Solaris et Windows/CygWin, montre que -DTOTO='"abc def"' marche dans tous ces cas-ci. Mais c'est loin d'être exhaustif -- pour commencer, c'est GNU make 3.81 dans tous les cas, et mon shell interactif est bash sous Windows. (Mais s'il se sert de $(shell ...), je crois qu'on peut supposer GNU make.)
J'ai aussi un cas des mes scripts où j'invoque un script de shell pour invoquer le compilateur (mais seulement sous Windows l'invocation du compilateur dépend évidemment de la plateforme). Chaque invocation du shell, évidemment, enlève une couche de , ' ou ". (Dans mon cas, le script supplémentaire n'apparaît que sur certains plateformes, en plus.)
Enfin, s'il n'a pas de problème de l'invocation du compilateur à travers un script (ce qui est quand même assez exceptionnel), la solution la plus simple (et la plus portable) est probablement d'utiliser : CFLAGS += -DTOTO='$( shell ... )' dans le fichier de make, et puis quelque chose comme: #define SS( s ) # s #define S( s ) SS( s )
S( TOTO ) dans ses sources.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34