Linking Problem using makefile.

Hi everybody.
I got an error message when I used this makefile, otherwise the project compiles perfectly without this makefile. It look like the makefile isn't able to link the object file.
I use the compiler g++.

This is the makefile I used.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

INCLUDE_FILES = $(wildcard include/*.h)
SOURCES_FILES := $(wildcard Source/*.cc) $(wildcard Source/*.cpp)
OBJS := $(subst Source,bin/obj,$(subst .cc,.o,$(subst .cpp,.o,$(SOURCES_FILES))))
WARNS = -Wall

CXX = mingw32-g++
CXXFLAGS = $(WARNS)
LDFLAGS = 
all: bin/TypeID.exe

bin/TypeID.exe: $(OBJS)
	${CXX} -o "$@" ${OBJS} ${LDFLAGS}

bin/obj/%.o: $(SOURCES_FILES) $(INCLUDE_FILES)
	$(CXX) $(CXXFLAGS) -I .\include -c -Wall -O3 $< -o $@

.PHONY: clean

clean:
	del bin/obj/*.o */


The error message give by the compiler look this:

mingw32-g++ -o "bin/TypeID.exe" bin/obj/Main.o bin/obj/Carre.o bin/obj/Forme.o b
in/obj/Rectangle.o bin/obj/Triangle.o
bin/obj/Carre.o:Main.cc:(.text.startup+0x0): multiple definition of `main'
bin/obj/Main.o:Main.cc:(.text.startup+0x0): first defined here
bin/obj/Forme.o:Main.cc:(.text.startup+0x0): multiple definition of `main'
bin/obj/Main.o:Main.cc:(.text.startup+0x0): first defined here
bin/obj/Rectangle.o:Main.cc:(.text.startup+0x0): multiple definition of `main'
bin/obj/Main.o:Main.cc:(.text.startup+0x0): first defined here
bin/obj/Triangle.o:Main.cc:(.text.startup+0x0): multiple definition of `main'
bin/obj/Main.o:Main.cc:(.text.startup+0x0): first defined here
bin/obj/Main.o:Main.cc:(.text$_ZN10QuelconqueD1Ev[Quelconque::~Quelconque()]+0xb
): undefined reference to `CForme::~CForme()'
bin/obj/Main.o:Main.cc:(.text$_ZN10QuelconqueD0Ev[Quelconque::~Quelconque()]+0x1
2): undefined reference to `CForme::~CForme()'
bin/obj/Main.o:Main.cc:(.text.startup+0x37): undefined reference to `CCarre::CCa
rre()'
bin/obj/Main.o:Main.cc:(.text.startup+0x50): undefined reference to `CRectangle:
:CRectangle()'
bin/obj/Main.o:Main.cc:(.text.startup+0x69): undefined reference to `CTriangle::
CTriangle()'
bin/obj/Main.o:Main.cc:(.text.startup+0x8e): undefined reference to `CForme::CFo
rme()'
bin/obj/Main.o:Main.cc:(.rdata$_ZTV10Quelconque[vtable for Quelconque]+0xc): und
efined reference to `CForme::LireHauteur()'
bin/obj/Carre.o:Main.cc:(.text.startup+0x37): undefined reference to `CCarre::CC
arre()'
bin/obj/Carre.o:Main.cc:(.text.startup+0x50): undefined reference to `CRectangle
::CRectangle()'
bin/obj/Carre.o:Main.cc:(.text.startup+0x69): undefined reference to `CTriangle:
:CTriangle()'
bin/obj/Carre.o:Main.cc:(.text.startup+0x8e): undefined reference to `CForme::CF
orme()'
bin/obj/Forme.o:Main.cc:(.text.startup+0x37): undefined reference to `CCarre::CC
arre()'
bin/obj/Forme.o:Main.cc:(.text.startup+0x50): undefined reference to `CRectangle
::CRectangle()'
bin/obj/Forme.o:Main.cc:(.text.startup+0x69): undefined reference to `CTriangle:
:CTriangle()'
bin/obj/Forme.o:Main.cc:(.text.startup+0x8e): undefined reference to `CForme::CF
orme()'
bin/obj/Rectangle.o:Main.cc:(.text.startup+0x37): undefined reference to `CCarre
::CCarre()'
bin/obj/Rectangle.o:Main.cc:(.text.startup+0x50): undefined reference to `CRecta
ngle::CRectangle()'
bin/obj/Rectangle.o:Main.cc:(.text.startup+0x69): undefined reference to `CTrian
gle::CTriangle()'
bin/obj/Rectangle.o:Main.cc:(.text.startup+0x8e): undefined reference to `CForme
::CForme()'
bin/obj/Triangle.o:Main.cc:(.text.startup+0x37): undefined reference to `CCarre:
:CCarre()'
bin/obj/Triangle.o:Main.cc:(.text.startup+0x50): undefined reference to `CRectan
gle::CRectangle()'
bin/obj/Triangle.o:Main.cc:(.text.startup+0x69): undefined reference to `CTriang
le::CTriangle()'
bin/obj/Triangle.o:Main.cc:(.text.startup+0x8e): undefined reference to `CForme:
:CForme()'
collect2: ld a retourné 1 code d'état d'exécution
make: *** [bin/TypeID.exe] Erreur 1


Last edited on
bin/obj/%.o: $(SOURCES_FILES) $(INCLUDE_FILES)
	$(CXX) $(CXXFLAGS) -I .\include -c -Wall -O3 $< -o $@
You are compiling the same source.

Try
bin/obj/%.o: Source/%.cpp
	$(CXX) $< -c $(CPPFLAGS) -Iinclude -o $@
And somewhere you need the dependences with the headers
bin/obj/Forme.o: $(addprefix include/,Forme.h Triangle.h Rectangle.h)

Last edited on
Topic archived. No new replies allowed.