"And you did mean to change the gcc to g++ in the CC section at the beginning, right?"
No. I mean that use g++ to compile .cpp files, and use gcc to compile C files.
my makefile for HLSDK is like this:
PHP Code:
#
# Half-Life Full SDK 2.2 Makefile for MinGW
#
# March 2002 by botman (botman@planethalflife.com)
# Modified by Wei Mingzhi (whistler_wmz@users.sf.net)
#
# this is the name of your game MOD DLL file...
DLLNAME=hl
# make sure this is the correct compiler for your system
CC=gcc
CPP=g++
DLL_SRCDIR=.
ENGINE_SRCDIR=../engine
COMMON_SRCDIR=../common
WPN_SHARED_SRCDIR=./wpn_shared
PM_SHARED_SRCDIR=../pm_shared
GAME_SHARED_SRCDIR=../game_shared
MAIN_OBJDIR=$(DLL_SRCDIR)/obj
DLL_OBJDIR=$(DLL_SRCDIR)/obj/dll
WPN_SHARED_OBJDIR=$(DLL_SRCDIR)/obj/wpn_shared
PM_SHARED_OBJDIR=$(DLL_SRCDIR)/obj/pm_shared
GAME_SHARED_OBJDIR=$(DLL_SRCDIR)/obj/game_shared
BASE_CFLAGS=-DCLIENT_WEAPONS
CFLAGS=$(BASE_CFLAGS) -w -march=i486 -O2
# use these when debugging...
#CFLAGS=$(BASE_CFLAGS) -g
INCLUDEDIRS=-I. -I$(ENGINE_SRCDIR) -I$(COMMON_SRCDIR) -I$(PM_SHARED_SRCDIR) -I$(GAME_SHARED_SRCDIR)
# normal linker flags...
LDFLAGS=-s
# use these when debugging...
#LDFLAGS=
DO_CC=$(CC) $(CFLAGS) $(INCLUDEDIRS) -o $@ -c $<
DO_CPP=$(CPP) $(CFLAGS) $(INCLUDEDIRS) -o $@ -c $<
#############################################################################
# SETUP AND BUILD
# GAME
#############################################################################
$(DLL_OBJDIR)/%.o: $(DLL_SRCDIR)/%.cpp
$(DO_CPP)
$(WPN_SHARED_OBJDIR)/%.o: $(WPN_SHARED_SRCDIR)/%.cpp
$(DO_CPP)
$(GAME_SHARED_OBJDIR)/%.o: $(GAME_SHARED_SRCDIR)/%.cpp
$(DO_CPP)
$(PM_SHARED_OBJDIR)/%.o: $(PM_SHARED_SRCDIR)/%.c
$(DO_CC)
OBJ = \
$(DLL_OBJDIR)/aflock.o \
$(DLL_OBJDIR)/agrunt.o \
$(DLL_OBJDIR)/airtank.o \
$(DLL_OBJDIR)/animating.o \
$(DLL_OBJDIR)/animation.o \
$(DLL_OBJDIR)/apache.o \
$(DLL_OBJDIR)/barnacle.o \
$(DLL_OBJDIR)/barney.o \
$(DLL_OBJDIR)/bigmomma.o \
$(DLL_OBJDIR)/bloater.o \
$(DLL_OBJDIR)/bmodels.o \
$(DLL_OBJDIR)/bullsquid.o \
$(DLL_OBJDIR)/buttons.o \
$(DLL_OBJDIR)/cbase.o \
$(DLL_OBJDIR)/client.o \
$(DLL_OBJDIR)/combat.o \
$(DLL_OBJDIR)/controller.o \
$(DLL_OBJDIR)/crossbow.o \
$(DLL_OBJDIR)/crowbar.o \
$(DLL_OBJDIR)/defaultai.o \
$(DLL_OBJDIR)/doors.o \
$(DLL_OBJDIR)/effects.o \
$(DLL_OBJDIR)/egon.o \
$(DLL_OBJDIR)/explode.o \
$(DLL_OBJDIR)/flyingmonster.o \
$(DLL_OBJDIR)/func_break.o \
$(DLL_OBJDIR)/func_tank.o \
$(DLL_OBJDIR)/game.o \
$(DLL_OBJDIR)/gamerules.o \
$(DLL_OBJDIR)/gargantua.o \
$(DLL_OBJDIR)/gauss.o \
$(DLL_OBJDIR)/genericmonster.o \
$(DLL_OBJDIR)/ggrenade.o \
$(DLL_OBJDIR)/globals.o \
$(DLL_OBJDIR)/gman.o \
$(DLL_OBJDIR)/h_ai.o \
$(DLL_OBJDIR)/h_battery.o \
$(DLL_OBJDIR)/h_cine.o \
$(DLL_OBJDIR)/h_cycler.o \
$(DLL_OBJDIR)/h_export.o \
$(DLL_OBJDIR)/handgrenade.o \
$(DLL_OBJDIR)/hassassin.o \
$(DLL_OBJDIR)/headcrab.o \
$(DLL_OBJDIR)/healthkit.o \
$(DLL_OBJDIR)/hgrunt.o \
$(DLL_OBJDIR)/hornet.o \
$(DLL_OBJDIR)/hornetgun.o \
$(DLL_OBJDIR)/houndeye.o \
$(DLL_OBJDIR)/ichthyosaur.o \
$(DLL_OBJDIR)/islave.o \
$(DLL_OBJDIR)/items.o \
$(DLL_OBJDIR)/leech.o \
$(DLL_OBJDIR)/lights.o \
$(DLL_OBJDIR)/maprules.o \
$(DLL_OBJDIR)/monstermaker.o \
$(DLL_OBJDIR)/monsters.o \
$(DLL_OBJDIR)/monsterstate.o \
$(DLL_OBJDIR)/mortar.o \
$(DLL_OBJDIR)/mp5.o \
$(DLL_OBJDIR)/multiplay_gamerules.o \
$(DLL_OBJDIR)/namefunc.o \
$(DLL_OBJDIR)/nihilanth.o \
$(DLL_OBJDIR)/nodes.o \
$(DLL_OBJDIR)/osprey.o \
$(DLL_OBJDIR)/pathcorner.o \
$(DLL_OBJDIR)/plane.o \
$(DLL_OBJDIR)/plats.o \
$(DLL_OBJDIR)/player.o \
$(DLL_OBJDIR)/python.o \
$(DLL_OBJDIR)/rat.o \
$(DLL_OBJDIR)/roach.o \
$(DLL_OBJDIR)/rpg.o \
$(DLL_OBJDIR)/satchel.o \
$(DLL_OBJDIR)/schedule.o \
$(DLL_OBJDIR)/scientist.o \
$(DLL_OBJDIR)/scripted.o \
$(DLL_OBJDIR)/shotgun.o \
$(DLL_OBJDIR)/singleplay_gamerules.o \
$(DLL_OBJDIR)/skill.o \
$(DLL_OBJDIR)/sound.o \
$(DLL_OBJDIR)/soundent.o \
$(DLL_OBJDIR)/spectator.o \
$(DLL_OBJDIR)/squadmonster.o \
$(DLL_OBJDIR)/squeakgrenade.o \
$(DLL_OBJDIR)/subs.o \
$(DLL_OBJDIR)/talkmonster.o \
$(DLL_OBJDIR)/teamplay_gamerules.o \
$(DLL_OBJDIR)/tempmonster.o \
$(DLL_OBJDIR)/tentacle.o \
$(DLL_OBJDIR)/triggers.o \
$(DLL_OBJDIR)/tripmine.o \
$(DLL_OBJDIR)/turret.o \
$(DLL_OBJDIR)/util.o \
$(DLL_OBJDIR)/weapons.o \
$(DLL_OBJDIR)/world.o \
$(DLL_OBJDIR)/xen.o \
$(DLL_OBJDIR)/zombie.o \
$(WPN_SHARED_OBJDIR)/hl_wpn_glock.o \
$(GAME_SHARED_OBJDIR)/voice_gamemgr.o \
$(PM_SHARED_OBJDIR)/pm_debug.o \
$(PM_SHARED_OBJDIR)/pm_math.o \
$(PM_SHARED_OBJDIR)/pm_shared.o
all: $(MAIN_OBJDIR)/$(DLLNAME).dll
$(MAIN_OBJDIR)/$(DLLNAME).dll: $(DLL_OBJDIR)/dir $(WPN_SHARED_OBJDIR)/dir \
$(GAME_SHARED_OBJDIR)/dir $(PM_SHARED_OBJDIR)/dir $(OBJ)
dllwrap $(LDFLAGS) --add-stdcall-alias --driver-name=$(CPP) -o $(MAIN_OBJDIR)/$(DLLNAME).dll $(OBJ)
$(MAIN_OBJDIR)/dir:
-mkdir $(MAIN_OBJDIR)
-@echo dir >$(MAIN_OBJDIR)/dir
$(DLL_OBJDIR)/dir: $(MAIN_OBJDIR)/dir
-mkdir $(DLL_OBJDIR)
-@echo dir >$(DLL_OBJDIR)/dir
$(WPN_SHARED_OBJDIR)/dir: $(MAIN_OBJDIR)/dir
-mkdir $(WPN_SHARED_OBJDIR)
-@echo dir >$(WPN_SHARED_OBJDIR)/dir
$(GAME_SHARED_OBJDIR)/dir: $(MAIN_OBJDIR)/dir
-mkdir $(GAME_SHARED_OBJDIR)
-@echo dir >$(GAME_SHARED_OBJDIR)/dir
$(PM_SHARED_OBJDIR)/dir: $(MAIN_OBJDIR)/dir
-mkdir $(PM_SHARED_OBJDIR)
-@echo dir >$(PM_SHARED_OBJDIR)/dir
clean:
-rm $(DLL_OBJDIR)/*.o
-rm $(WPN_SHARED_OBJDIR)/*.o
-rm $(GAME_SHARED_OBJDIR)/*.o
-rm $(PM_SHARED_OBJDIR)/*.o
-rm $(MAIN_OBJDIR)/$(DLLNAME).dll
also if you can't use "make" command, use "mingw32-make" instead.