Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/07/2007, à 19:57

rtfm

Aide Makefile

Salut
J'ai une question sur les Makefile:
En ce moment j utilise le makefile ci dessous mais il a le désavantages de générer les .o la ou ce trouve les .cc. Si vous savez comment le modif pour qu'il génére les .o dans un repertoire particulier genre obj, merci du coup de main. big_smile

mon arbo :
main.cc
build/Makefile
build/obj
src/.....

MakeFile:
# compilateur
CXX = g++

# ================== Name changes happen here only ==============
TARGET = K
# c++ files with .C extension
C++SOURCES =    ../main  ../src/tools/graph/classicgraph   
# c files
CSOURCES =
# object sources if needed, not to be build !!! CHANGE MAKE CLEAN !!!
OSOURCES =   
# ===============================================================
# Flags: -O0 to avoid optimization, -O3 for best
# ------------------- Compilers options -------------------------
#
CCFLAGS = -g -O2
LIBS = -lm
LIBSDIR =
INCLDIR = -I. -I/usr/include/g++-2

# ---------------------------------------------------------------

# This is processed automatically
SOURCEFILES = $(C++SOURCES:=.cc) $(CSOURCES:=.c)
OBJECTFILES = $(C++SOURCES:=.o) $(CSOURCES:=.o)


# --- Begins compiling files --- Don't forget to do make depend after any add
$(TARGET):  $(OBJECTFILES)
    @echo "\n=== Linking ==="
    $(CXX) $(CCFLAGS) $(LIBSDIR) -o $(TARGET) $(OSOURCES) \
    $(OBJECTFILES) $(LIBS)

.c.o:
    @echo "\n---" $@ "---"
    $(CXX) $(INCLDIR) $(CCFLAGS) -c -o $@  $<

# -------------------------------

# --- This build dependencies

depend:
    makedepend -D__cplusplus $(INCLDIR) $(SOURCEFILES)

# -------------------------------

cln:
    rm -f *~ *.o core
    make depend

clean:
    rm -f *~ *.o core

bak:
    cp *.[ccHh] Makefile Backup/


# ******************** Makedepend performs here *******************
#
# Be sure to let a blank line after this one

# DO NOT DELETE

../main.o: ../src/tools/graph/classicgraph.h ../src/tools/graph.h
../src/tools/graph/classicgraph.o: ../src/tools/graph/classicgraph.h
../src/tools/graph/classicgraph.o: ../src/tools/graph.h

Hors ligne

#2 Le 31/07/2007, à 20:26

AuraHxC

Re : Aide Makefile

Y a pas moyen avec la règle d'inférence :

obj/%.o : src/%.c

Je me souviens plus exactement faudrait que je regarde dans mes makefile de projets où j'ai des dossiers justement pour chaque chose (headers, sources, objet, librairie, etc...).

Hors ligne

#3 Le 31/07/2007, à 20:35

rtfm

Re : Aide Makefile

Merci de ta reponse mais je comprend pas bien comment ca tourne make.
j essaye de modif

.c.o:
	@echo "\n---" $@ "---"
	$(CXX) $(INCLDIR) $(CCFLAGS) -c -o $@  $<

et

$(TARGET):  $(OBJECTFILES)
	@echo "\n=== Linking ==="
	$(CXX) $(CCFLAGS) $(LIBSDIR) -o $(TARGET) $(OSOURCES) \
	$(OBJECTFILES) $(LIBS)

mais des que je test des trucs ca marche plus

Hors ligne

#4 Le 31/07/2007, à 21:09

AuraHxC

Re : Aide Makefile

Je sais que ta règle d'inférence que tu utilise est une vieille version :
on écrit maintenant %.o: %.c plutôt que .c.o:

Je suis en train de regarder mes makefiles vite fait pour voir si je redirigeais les fichiers objets.

Hors ligne

#5 Le 31/07/2007, à 21:17

AuraHxC

Re : Aide Makefile

Bon j'ai retrouvé mais je foutais pas les objets dans un dossier, donc à la rigueur si quelqu'un a une solution ca serait pas mal tongue

Parce que j'ai un truc comme ca :

CC=gcc
CFLAGS=-Wall -Iheaders
LDFLAGS=-Wall -lm
EXEC=bin/mainTest
VPATH=src
vpath %.h headers
SRC=$(wildcard src/*.c)
OBJ=$(notdir $(SRC:.c=.o))

mainTest : $(OBJ)
	@ $(CC) -o $(EXEC) $(OBJ) $(LDFLAGS)
	@echo creation de lien

%.o:%.c
	@ $(CC) -c $< $(CFLAGS)
	@echo creation de $@

.PHONY: clean mrproper
	@echo suppression de tous les fichiers.

mrproper: clean
	@ rm -f $(EXEC)
	@echo suppression executable

clean:
	@ rm -f *.o
	@echo suppression des fichiers objets

j'ai un dossier bin (executable), headers, src et voilà.

Hors ligne