Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

20.02.2010, 17:13

makefile plattformunabhängig

Hi leute ich versuch das erstelle meines projects etwas zu vereinfach mit makefile.
Nun hab ich aber ein probleme.
1. hab ich probleme mit den mkdir von windows dieser untschstützt wohl keine "/" oder "./balbal/balbal", es kommt ein syntax fehler

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#Please set operation system with the OS macro
#
# linux: Linux (g++)
# win32: Microsoft Windows 32 bit (mingw)
#

#Operation system
OS          := win32

#Source Code Dir
SRCDIR          := ./

#Headers Dir
HEADERSDIR      := ./

#Project Settings
EXPORTMACRO         := DLL_EXPORTS
OUTLIB              := Test
OUTDEF              := Test.def
OUTIMPLIB           := libTest.a

#Debug and Release Setting
DEBUGFLAGS      := -g
RELEASEFLAGS        := -O2 -s
        
CXX         :=

#Linux Settings
ifeq ($(OS),linux)
CXX                 := g++
INCLUDEDIR          := ./
LIBDIR              := ./
BUILDDIR            := ./linux

OUTDIR              := lib
OBJDIR              := obj

DEBUGDIR            := $(BUILDDIR)/Debug
RELEASEDIR          := $(BUILDDIR)/Release

SRCSUF                  := cpp
OBJSUF          := o 
OUTLIBSUF       := so

LIBFLAGS            := -lGL 
CXXFLAGS            := -Wall -fPIC -D$(EXPORTMACRO) -I$(INCLUDEDIR) -L$(LIBDIR)
CXXFLAGSDLL             := -shared
OUTFLAG         := -o
endif

#Windows 32 Bit Settings
ifeq ($(OS),win32)
CXX                 := mingw32-g++.exe
INCLUDEDIR          := ./
LIBDIR              := ./
BUILDDIR            := ./win32

OUTDIR              := bin
OBJDIR              := obj
OUTLIBDIR       := lib

DEBUGDIR            := $(BUILDDIR)/Debug
RELEASEDIR          := $(BUILDDIR)/Release

SRCSUF                  := cpp
OBJSUF          := o 
OUTLIBSUF       := dll

LIBFLAGS            := -lopengl32
CXXFLAGS            := -Wall -D$(EXPORTMACRO) -I$(INCLUDEDIR) -L$(LIBDIR) 
CXXFLAGSDLL             := -shared -Wl,--dll
OUTFLAG         := -o
endif

#Error,  Other OS
ifeq ($(CXX),)
@echo $(OS) invalid OS
exit(1)
endif

override BUILDDIR       := $(strip $(BUILDDIR))
SOURCES                 := $(wildcard $(SRCDIR)/*.$(SRCSUF))
OBJECTSDEBUG            := $(patsubst $(SRCDIR)/%.$(SRCSUF), $(DEBUGDIR)/$(OBJDIR)/%.$(OBJSUF), $(SOURCES))
OBJECTSRELEASE      := $(patsubst $(SRCDIR)/%.$(SRCSUF), $(RELEASEDIR)/$(OBJDIR)/%.$(OBJSUF), $(SOURCES))

install: Debug Release
    @echo
    @echo Makefile finished
    @echo OS: $(OS)
    @echo Compiler: $(CXX)
    @echo Fantasy2C Debug and Release has been successfully compiled.

debugdirs:
    mkdir -p $(DEBUGDIR)/$(OBJDIR)
    mkdir -p $(DEBUGDIR)/$(OUTDIR)
                
releasedirs:
    mkdir -p $(RELEASEDIR)/$(OBJDIR)
    mkdir -p $(RELEASEDIR)/$(OUTDIR)

ifeq ($(OS),win32)

Debug : debugdirs $(OBJECTSDEBUG)
    $(CXX) $(DEBUGFLAGS) $(CXXFLAGSDLL) -I$(HEADERSDIR) --out-def=$(DEBUGDIR)/$(OUTLIBDIR)/$(OUTDEF) -Wl,--out-implib=$(DEBUGDIR)/$(OUTLIBDIR)/$(OUTIMPLIB)  -Wl, -o $(DEBUGDIR)/$(OUTDIR)/$(OUTLIB).$(OUTLIBSUF) $(OBJECTSDEBUG)  $(LIBFLAGS)
 
Release : releasedirs $(OBJECTSRELEASE)
    $(CXX) $(RELEASEFLAGS) $(CXXFLAGSDLL) -I$(HEADERSDIR) --out-def=$(RELEASEDIR)/$(OUTLIBDIR)/$(OUTDEF) -Wl,--out-implib=$(RELEASEDIR)/$(OUTLIBDIR)/$(OUTIMPLIB)  -Wl, -o $(RELEASEDIR)/$(OUTDIR)/$(OUTLIB).$(OUTLIBSUF) $(OBJECTSRELEASE) $(LIBFLAGS)

else

Debug : debugdirs $(OBJECTSDEBUG)
    $(CXX) $(DEBUGFLAGS) $(CXXFLAGSDLL) -I$(HEADERSDIR) $(OUTFLAG)$(DEBUGDIR)/$(OUTDIR)/$(OUTLIB).$(OUTLIBSUF) $(OBJECTSDEBUG) $(LIBFLAGS)
 
Release : releasedirs $(OBJECTSRELEASE)
    $(CXX) $(RELEASEFLAGS) $(CXXFLAGSDLL) -I$(HEADERSDIR) $(OUTFLAG)$(RELEASEDIR)/$(OUTDIR)/$(OUTLIB).$(OUTLIBSUF) $(OBJECTSRELEASE) $(LIBFLAGS)

endif

$(OBJECTSDEBUG): $(DEBUGDIR)/$(OBJDIR)/%.$(OBJSUF): $(SRCDIR)/%.$(SRCSUF) $(DEBUGDIR)/$(OBJDIR)/.tag
    $(CXX) $(DEBUGFLAGS) $(CXXFLAGS) -I$(HEADERSDIR) -c $< $(OUTFLAG) $@ 


$(OBJECTSRELEASE): $(RELEASEDIR)/$(OBJDIR)/%.$(OBJSUF): $(SRCDIR)/%.$(SRCSUF) $(RELEASEDIR)/$(OBJDIR)/.tag
    $(CXX) $(RELEASEFLAGS) $(CXXFLAGS) -I$(HEADERSDIR) -c $< $(OUTFLAG) $@ 

%.tag:
    mkdir -p $(dir $(@))
    touch $@


clean: cleanDebug cleanRelease


cleanDebug:
    rm -rf $(DEBUGDIR)/$(OBJDIR)

cleanRelease:
    rm -rf $(RELEASEDIR)/$(OBJDIR)