J'ai fait un makefile simple.
Mais ᅵ chaque fois que je lance une compilation, il me recompile
absolument tout alors que les .objs n'ont pas toujours ᅵ ᅵtre recompilᅵ
(source moins rᅵcente que l'.objs).
N'y a t-il pas options "GNU Makefilienne" (c'est ᅵ dire portable Linux et
MinGw) qui permette de faire ᅵa ?
D'avance merci pour vos lumiᅵres,
-TSalm
Normalement, ᅵa marche toujours comme ᅵa. A quoi ressemble votre Makefile ?
--
Richard
Voilᅵ :
/* ------------- DEBUT ---------------- */
CXX=g++
CXXFLAGS=-W -I./src -g
LDFLAGS=
OBJDIR=objs/obj
EXEDIR=objs/bin
.SUFFIXES: .cpp .o
.cpp.o:
@echo " =====> Compile $@ <====="
mkdir -p `dirname $(OBJDIR)/$@`
$(CXX) $(CXXFLAGS) -c $*.cpp -o $(OBJDIR)/$@
@echo
#
# EXECUTABLE
#
all: tests/fx/test4 \
tests/gzip/gzip_in_memory
tests/fx/test4: src/base/date_tools.o \
src/base/file_tools.o
@echo " =====> Link $@ <====="
mkdir -p `dirname $(EXEDIR)/$@`
$(CXX) $(CXXFLAGS) $(LDFLAGS) $@.cpp $(patsubst %,$(OBJDIR)/%,$^)
-o $(EXEDIR)/$@
@echo
tests/gzip/gzip_in_memory:
@echo " =====> Link $@ <====="
mkdir -p `dirname $(EXEDIR)/$@`
$(CXX) $(CXXFLAGS) $(LDFLAGS) -g -lz $@.cpp $(patsubst
%,$(OBJDIR)/%,$^) -o $(EXEDIR)/$@
@echo
# CCC L EEE A NN N
# C L EE A=A N NN
# CCC LLL EEE A A N N
clean:
rm -rf $(OBJDIR)/*
/* ------------------------------------ */
plus simplement :
$(CXX) $(CXX_FLAGS) -c $< -o $(OBJDIR)/$@
> @echo
>
> #
> # EXECUTABLE
> #
> all: tests/fx/test4 \
> tests/gzip/gzip_in_memory
>
>
> tests/fx/test4: src/base/date_tools.o \
> src/base/file_tools.o
src/base ou objs/obj ?
> @echo " =====> Link $@ <====="
> mkdir -p `dirname $(EXEDIR)/$@`
> $(CXX) $(CXXFLAGS) $(LDFLAGS) $@.cpp $(patsubst %,$(OBJDIR)/%,$^) -o
> $(EXEDIR)/$@
> @echo
>
>
> tests/gzip/gzip_in_memory:
> @echo " =====> Link $@ <====="
> mkdir -p `dirname $(EXEDIR)/$@`
> $(CXX) $(CXXFLAGS) $(LDFLAGS) -g -lz $@.cpp $(patsubst %,$(OBJDIR)/%,$^)
> -o $(EXEDIR)/$@
> @echo
>
>
>
> # CCC L EEE A NN N
> # C L EE A=A N NN
> # CCC LLL EEE A A N N
> clean:
> rm -rf $(OBJDIR)/*
>
> /* ------------------------------------ */
Il manque les dᅵpendences entre les .o et les .cpp.
--
Richard
C'est des problemes de repertoire: make n'a aucune raison de trouver
tout seul la correspondance entre tes sources et tes objets.
Il faut:
- soit que tu lui dises explicitement comment ca marche
- soit que tu mettes tes objets au meme endroit que tes sources
- ou alors tu peux utiliser l'extension extremement commune VPATH
pour lui dire de regarder aussi dans OBJDIR.
Deja, ton mkdir -p `dirname $(OBJDIR)/$@` me fait ticker.
Normalement, $@ doit etre le bon nom de cible, et il faudrait un
bete mkdir -p ${@D}
> Deja, ton mkdir -p `dirname $(OBJDIR)/$@` me fait ticker.
> Normalement, $@ doit etre le bon nom de cible, et il faudrait un
> bete mkdir -p ${@D}
Effectivement, ᅵa ne doit pas ᅵtre portable non plus.
Merci.