makefile sous linux comment ca marche ?

makefile sous linux comment ca marche ? - C++ - Programmation

Marsh Posté le 21-05-2003 à 08:49:28    

salut,
 
je ne manipule pas bien le makefile donc j ai quelques petites questions :
 
 peut on specifier dans un makefile une option de compilation permettant d inserer un    #define dans le code, car sous windows le #define _WIN32 existe grace au compilateur mais sous linux je ne sais pas si un tel #define existe ( j ai essayé _LINUX mais apparemment ca existe pas)
 
est il egalement possible de faire la chose suivante :
 
make debug -> me compile avec un #define _DEBUG
make release -> me compile avec un #define _RELEASE
 
Enfin , comment  faire pour  specifier le compilateur pour tel ou tel processeur dans le makefile :
 
actuellement, selon la plateforme sur laquelle je suis, j edite mon makefile pour changer le compilateur. Mais j aimerai faire :
 
make arm -> pour compiler mon  prog avec le cross compilateur arm
make i386 pour compiler avec gcc .
 
merci de vos reponses

Reply

Marsh Posté le 21-05-2003 à 08:49:28   

Reply

Marsh Posté le 21-05-2003 à 09:59:16    

[:drapo]


---------------
get amaroK plugin
Reply

Marsh Posté le 21-05-2003 à 10:23:11    

bouh :cry: personne pour m aider :??:

Reply

Marsh Posté le 21-05-2003 à 10:28:25    

je sais pas mais tu peux faire
#ifdef DEBUG dans ton source pour le debug
?t #ifddef DEBUG pour realase
et compilé avec gcc -D DEBUG pour le debug

Reply

Marsh Posté le 21-05-2003 à 10:44:58    

Pour definir un symbole du preprocesseur a partir du makefile, il faut utiliser l'option -D de gcc comme ceci :
gcc -DDEBUG fichier.c
 
Sinon, pour ce que tu veux faire avec differentes archi et autres, je ne saurais que te conseiller de te trouver une bonne doc sur le make de GNU, ou sans doute mieux, d'utiliser automake/autoconf.

Reply

Marsh Posté le 21-05-2003 à 10:59:13    

ok l option -D je ne la connaissais pas . -D_DEBUG ca marche ? (mais suis je bete , je vais essayer :D)
 

Reply

Marsh Posté le 21-05-2003 à 11:29:33    

je n ai pas trouvé de doc concernant la structure du fichier makefile (les sites sur google sont tres pauvres, il disent tous la meme chose et rien d interessant)
 
Ce que je voudrais faire , c pouvoir affecter une valeur a une variable selon la cible :
 
ex :
 

Code :
  1. debug : main.o
  2.          OPTIONS= -Wall -DDEBUG
  3.           gcc -o main main.o
  4. release : main.o
  5.          OPTIONS= -Wall -DRELEASE
  6.           gcc -o main main.o
  7. main.o : main.cpp main.h
  8.           gcc -c $(OPTIONS) main.cpp


 
 
mais ca ca marche pas... apparemment on ne peut pas affecter de variable dans une cible. Quelqu un voit comment faire ?
 
 
merci

Reply

Marsh Posté le 21-05-2003 à 15:12:49    

aucune idée, :(
mais tu as essayé de regarder la page de manuel de make? la structure du makefile est décrite il me semble

Reply

Marsh Posté le 21-05-2003 à 15:57:48    

:( non elle n est pas decrite, ils disent deregarder dans make.info et je n ai pas ce fichier... pas grave je me debrouillerai autrement merci :)

Reply

Marsh Posté le 22-05-2003 à 10:50:14    

essaye ca  
 
 

Code :
  1. release : option_r main.o
  2.           gcc -o main main.o
  3. debug : option_d main.o
  4.           gcc -o main main.o
  5. optionr :
  6.          OPTION = -D RELEASE
  7. optiond :
  8.          OPTION = -D DEBUG
  9. main.o : main.cpp main.h
  10.          gcc -c $(OPTION) main.cpp

Reply

Marsh Posté le 22-05-2003 à 10:50:14   

Reply

Marsh Posté le 11-03-2011 à 12:30:42    

Bonjour,
 
Une fois que le makefile est fait, que faut-il taper dans le terminal pour exécuter le programme ?
 
est-ce que c'est :
make
./main.c
 
 
Merci de votre aide.

Reply

Marsh Posté le 11-03-2011 à 16:00:50    

cricket18 a écrit :

Bonjour,
 
Une fois que le makefile est fait, que faut-il taper dans le terminal pour exécuter le programme ?
 
est-ce que c'est :
make
./main.c
 
 
Merci de votre aide.


make tout court. Dans ton make, tu a précisé le target de la compilation : ./TARGET et hop, ça roule.


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 21-03-2011 à 07:31:02    

Si par defaut (et c'est conseille) ton make compile avec les flags de debug, ton makefile doit etre
 


CXX_FLAGS= -W -Wall -Werror -pedantic # flags conseilles pour pas faire de conneries
 
all: set_debug main.o
          gcc -o main $(CXX_FLAGS) main.o
 
debug: all
 
release: main.o # A priori, inutile de setter une macro RELEASE, puisque seule DEBUG est utilisee dans le code
          gcc -o main $(CXX_FLAGS) main.o
 
set_debug:
          CXX_FLAGS= $(CXX_FLAGS) -DDEBUG          
 
%.o : %.cpp %.h
          gcc -c $(CXX_FLAGS) %.cpp -o $@ #Histoire de rester generique
 


 
Et tu fais "make", "make all" ou "make debug" pour compiler en debug. "make release" pour compiler sans les flags de debug.
 
Sinon, peu de mon utilise encore les makefiles a la main. Regarde plutot du cote de cmake, c'est assez magique  :ange:  : http://florian-goujeon.developpez. [...] nitiation/


Message édité par Pascal le nain le 21-03-2011 à 07:34:47
Reply

Sujets relatifs:

Leave a Replay

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