So I've started learning makefiles today for a project I've been working on. The project uses OpenGL and GDI. I decided to dive right into make files and so far, everything compiles but at the very end, it gives a bunch of undefined references. Thing is, when compiled in codeblocks, the project compiles just fine! I decided to learn make files just for the sake of learning it but now I cannot figure out what I did wrong at all :S I'd like someone to take a look at it and maybe help me on what I'm doing wrong please.
The errors I get is as follows (below it has my makefile):
obj/Calculations.o:Calculations.cpp:(.text+0x3d7): undefined reference to `glGet
Integerv@8'
obj/Calculations.o:Calculations.cpp:(.text+0x3f0): undefined reference to `glGet
Doublev@8'
obj/Calculations.o:Calculations.cpp:(.text+0x409): undefined reference to `glGet
Doublev@8'
obj/Calculations.o:Calculations.cpp:(.text+0x465): undefined reference to `gluPr
oject@48'
obj/Calculations.o:Calculations.cpp:(.text+0x50c): undefined reference to `gluPr
oject@48'
obj/Calculations.o:Calculations.cpp:(.text+0x572): undefined reference to `glGet
Integerv@8'
obj/Calculations.o:Calculations.cpp:(.text+0x58b): undefined reference to `glGet
Doublev@8'
obj/Calculations.o:Calculations.cpp:(.text+0x5a4): undefined reference to `glGet
Doublev@8'
obj/Calculations.o:Calculations.cpp:(.text+0x6a3): undefined reference to `gluUn
Project@48'
obj/Calculations.o:Calculations.cpp:(.text+0x7db): undefined reference to `gluUn
Project@48'
obj/Commands.o:Commands.cpp:(.text+0x115): undefined reference to `wglGetCurrent
DC@0'
obj/Commands.o:Commands.cpp:(.text+0x12b): undefined reference to `GetDeviceCaps
@8'
obj/Commands.o:Commands.cpp:(.text+0x1bb): undefined reference to `CreateFontA@5
6'
obj/Commands.o:Commands.cpp:(.text+0x1d3): undefined reference to `SelectObject@
8'
obj/Commands.o:Commands.cpp:(.text+0x22b): undefined reference to `SelectObject@
8'
obj/Commands.o:Commands.cpp:(.text+0x239): undefined reference to `DeleteObject@
4'
obj/Commands.o:Commands.cpp:(.text+0x260): undefined reference to `glDeleteLists
@8'
obj/Commands.o:Commands.cpp:(.text+0x2d4): undefined reference to `glGetIntegerv
@8'
obj/Commands.o:Commands.cpp:(.text+0x38f): undefined reference to `glGetIntegerv
@8'
obj/Commands.o:Commands.cpp:(.text+0x3c4): undefined reference to `glGetIntegerv
@8'
obj/Commands.o:Commands.cpp:(.text+0x4b0): undefined reference to `glColor4f@16'
obj/Images.o:Images.cpp:(.text+0xa90): undefined reference to `DeleteDC@4'
obj/Images.o:Images.cpp:(.text+0xaa1): undefined reference to `DeleteObject@4'
obj/Images.o:Images.cpp:(.text+0x1202): undefined reference to `CreateCompatible
DC@4'
obj/Images.o:Images.cpp:(.text+0x1240): undefined reference to `SelectObject@8'
obj/Images.o:Images.cpp:(.text+0x125d): undefined reference to `GetObjectA@12'
obj/Images.o:Images.cpp:(.text+0x1381): undefined reference to `GetDIBits@28'
obj/MemoryCommunication.o:MemoryCommunication.cpp:(.text+0x8f): undefined refere
nce to `glGetIntegerv@8'
obj/MemoryCommunication.o:MemoryCommunication.cpp:(.text+0x11b): undefined refer
ence to `glGetIntegerv@8'
obj/MemoryCommunication.o:MemoryCommunication.cpp:(.text+0x134): undefined refer
ence to `glGetDoublev@8'
obj/MemoryCommunication.o:MemoryCommunication.cpp:(.text+0x14d): undefined refer
ence to `glGetDoublev@8'
obj/RSHooks.o:RSHooks.cpp:(.text+0x984): undefined reference to `glGetIntegerv@8
'
obj/RSHooks.o:RSHooks.cpp:(.text+0x99d): undefined reference to `glGetDoublev@8'
obj/RSHooks.o:RSHooks.cpp:(.text+0x9b6): undefined reference to `glGetDoublev@8'
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libmingw32.a(main.o): In function
`main':
C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to `WinMai
n@16'
collect2: ld returned 1 exit status
make: *** [bin/Windows/OpenGL32.dll] Error 1
My makefile is as follows:
WinGPP = g++
LinGPP = g++
BinDIR = bin
ObjDIR = obj
SrcDIR = src
WinOUT = OpenGL32.dll
LinOUT = OpenGL32.so
WinDIR = $(BinDIR)/Windows
LinDIR = $(BinDIR)/Linux
WinDEP = -static-libgcc -static-libstdc++ -luser32 -lgdi32 -lglu32 -lopengl32 -s -o
LinDEP = -User32 -Gdi32 -Glu32 -OpenGL32
WinARGS = -std=c++0x -Wall -O0 -DOPENGL32_EXPORTS -s -c
LinARGS = -DLINUX -O3 -s -c
HppFiles = \
$(SrcDIR)/Calculations.hpp \
$(SrcDIR)/Commands.hpp \
$(SrcDIR)/Defines.hpp \
$(SrcDIR)/Functions.hpp \
$(SrcDIR)/GLHook.hpp \
$(SrcDIR)/Images.hpp \
$(SrcDIR)/MemoryCommunication.hpp \
$(SrcDIR)/Models.hpp \
$(SrcDIR)/RSHooks.hpp \
$(SrcDIR)/Serialize.hpp \
$(SrcDIR)/SharedMemory.hpp \
$(SrcDIR)/Vector3D.hpp \
$(SrcDIR)/OpenGL32.def
CppFiles = \
$(SrcDIR)/Calculations.cpp \
$(SrcDIR)/Commands.cpp \
$(SrcDIR)/Functions.cpp \
$(SrcDIR)/GLHook.cpp \
$(SrcDIR)/Images.cpp \
$(SrcDIR)/MemoryCommunication.cpp \
$(SrcDIR)/Models.cpp \
$(SrcDIR)/RSHooks.cpp \
$(SrcDIR)/Serialize.cpp \
$(SrcDIR)/SharedMemory.cpp \
$(SrcDIR)/Vector3D.cpp \
$(SrcDIR)/main.cpp
ObjFiles = \
$(ObjDIR)/Calculations.o \
$(ObjDIR)/Commands.o \
$(ObjDIR)/Functions.o \
$(ObjDIR)/GLHook.o \
$(ObjDIR)/Images.o \
$(ObjDIR)/MemoryCommunication.o \
$(ObjDIR)/Models.o \
$(ObjDIR)/RSHooks.o \
$(ObjDIR)/Serialize.o \
$(ObjDIR)/SharedMemory.o \
$(ObjDIR)/Vector3D.o \
$(ObjDIR)/main.o
all:
@echo
@echo " Instructions For Making OpenGL32:"
@echo
@echo " For Windows: make windows"
@echo " For Linux: make linux"
@echo " For Both: make both"
@echo " To Clean Files: make clean"
everything: linux windows
linux: $(ObjFiles) cc -o linux $(ObjFiles)
windows: $(WinDIR)/$(WinOUT)
@echo "Finished Building OpenGL32."
$(WinDIR)/$(WinOUT): $(ObjFiles)
@echo
@echo "Linking Object Files.."
@mkdir -p $(BinDIR)
@$(WinGPP) -Wl,$(SrcDIR)/OpenGL32.def $(WinDEP) $(WinDIR)/$(WinOUT) $(ObjFiles)
$(ObjDIR)/Calculations.o: $(CppFiles) $(HppFiles)
@echo " Compiling: Calculations.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/Calculations.o $(SrcDIR)/Calculations.cpp -lOpenGL32
$(ObjDIR)/Commands.o: $(CppFiles) $(HppFiles)
@echo " Compiling: Commands.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/Commands.o $(SrcDIR)/Commands.cpp
$(ObjDIR)/Defines.o: $(CppFiles) $(HppFiles)
@echo " Compiling: Defines.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/Defines.o $(SrcDIR)/Defines.cpp
$(ObjDIR)/Functions.o: $(CppFiles) $(HppFiles)
@echo " Compiling: Functions.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/Functions.o $(SrcDIR)/Functions.cpp
$(ObjDIR)/GLHook.o: $(CppFiles) $(HppFiles)
@echo " Compiling: GLHook.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/GLHook.o $(SrcDIR)/GLHook.cpp
$(ObjDIR)/Images.o: $(CppFiles) $(HppFiles)
@echo " Compiling: Images.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/Images.o $(SrcDIR)/Images.cpp
$(ObjDIR)/MapStructures.o: $(CppFiles) $(HppFiles)
@echo " Compiling: MapStructures.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/MapStructures.o $(SrcDIR)/MapStructures.cpp
$(ObjDIR)/MemoryCommunication.o: $(CppFiles) $(HppFiles)
@echo " Compiling: MemoryCommunication.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/MemoryCommunication.o $(SrcDIR)/MemoryCommunication.cpp
$(ObjDIR)/Models.o: $(CppFiles) $(HppFiles)
@echo " Compiling: Models.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/Models.o $(SrcDIR)/Models.cpp
$(ObjDIR)/RSHooks.o: $(CppFiles) $(HppFiles)
@echo " Compiling: RSHooks.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/RSHooks.o $(SrcDIR)/RSHooks.cpp
$(ObjDIR)/Serialize.o: $(CppFiles) $(HppFiles)
@echo " Compiling: Serialize.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/Serialize.o $(SrcDIR)/Serialize.cpp
$(ObjDIR)/SharedMemory.o: $(CppFiles) $(HppFiles)
@echo " Compiling: SharedMemory.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/SharedMemory.o $(SrcDIR)/SharedMemory.cpp
$(ObjDIR)/Vector3D.o: $(CppFiles) $(HppFiles)
@echo " Compiling: Vector3D.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/Vector3D.o $(SrcDIR)/Vector3D.cpp
$(ObjDIR)/main.o: $(CppFiles) $(HppFiles)
@echo " Compiling: main.cpp"
@mkdir -p $(ObjDIR)
@$(WinGPP) $(WinARGS) -o $(ObjDIR)/main.o $(SrcDIR)/main.cpp