Pages : 1
#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.
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
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
Pages : 1