wxWidgets 的安装参见 my c++ development environment
项目
打开 Eclipse,建立 C++ Project > Makefile project。
发布
编译时如果带有 -mthreads 选项,应用程序在发布时需要在同一目录下发布 mingwm10.dll(11K,在 mingw/bin/ 下),参考这里。
Makefile
最简单的 Makefile 参考这里。
编译选项
共有4种选择:
- debug
- release
- unicodedebug
- unicoderelease
把行1修改成对应的值;或者使用命令:
make -f makefile.gcc CONFIG=debug
CONFIG?=debug
# unicodedebug
ifeq ($(CONFIG),unicodedebug)
WXWIN=C:/wx
GCCFLAGS=
CXX=g++.exe
CC=gcc.exe
RESCOMP=windres.exe
OUTPUTPATH=MinGWUnicodeDebug
OBJECTPATH=MinGWUnicodeDebug
BUILDPATHS=$(OBJECTPATH)
CPPFLAGS= -fno-rtti -fno-pcc-struct-return -fstrict-aliasing -Wall -Wno-write-strings -D__WXMSW__ -D__GNUWIN32__ -D__WIN95__ -DUNICODE
WARNINGFLAGS=-Wall -Wno-write-strings
OPTFLAGS=-O0
DEBUGFLAGS=-D__WXDEBUG__ -ggdb
LINKERFLAGS=-Wl,--subsystem,windows -mwindows
LIBS=-lwxmsw28ud_xrc -lwxmsw28ud_richtext -lwxmsw28ud_aui -lwxmsw28ud_adv -lwxmsw28ud_html -lwxmsw28ud_core -lwxbase28ud -lwxbase28ud_net -lwxbase28ud_xml -lwxtiffd -lwxjpegd -lwxpngd -lwxzlibd -lwxregexud -lwxexpatd -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
CPPINC=-I"$(WXWIN)/include" -I"$(WXWIN)/contrib/include" -I"$(WXWIN)/lib/gcc_lib/mswud"
LIBPATH=-L"$(WXWIN)/lib/gcc_lib"
RESPATH=--include-dir "$(WXWIN)/include" --include-dir "$(WXWIN)/contrib/include" --include-dir "$(WXWIN)/lib/gcc_lib/mswud"
PROGRAM=TestFirebirdNew.exe
RCFILEOBJ=TestFirebirdNew_rc.o
RCFILESRC=TestFirebirdNew.rc
# unicoderelease
else
ifeq ($(CONFIG),unicoderelease)
WXWIN=C:/wx
GCCFLAGS=
CXX=g++.exe
CC=gcc.exe
RESCOMP=windres.exe
OUTPUTPATH=MinGWUnicodeRelease
OBJECTPATH=MinGWUnicodeRelease
BUILDPATHS=$(OBJECTPATH)
CPPFLAGS= -fno-rtti -fno-pcc-struct-return -fstrict-aliasing -Wall -Wno-write-strings -D__WXMSW__ -D__GNUWIN32__ -D__WIN95__ -DUNICODE
WARNINGFLAGS=-Wall -Wno-write-strings
OPTFLAGS=-O
DEBUGFLAGS=
LINKERFLAGS=-Wl,--subsystem,windows -mwindows
LIBS=-lwxmsw28u_xrc -lwxmsw28u_richtext -lwxmsw28u_aui -lwxmsw28u_adv -lwxmsw28u_html -lwxmsw28u_core -lwxbase28u -lwxbase28u_net -lwxbase28u_xml -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
CPPINC=-I"$(WXWIN)/include" -I"$(WXWIN)/contrib/include" -I"$(WXWIN)/lib/gcc_lib/mswu"
LIBPATH=-L"$(WXWIN)/lib/gcc_lib"
RESPATH=--include-dir "$(WXWIN)/include" --include-dir "$(WXWIN)/contrib/include" --include-dir "$(WXWIN)/lib/gcc_lib/mswu"
PROGRAM=TestFirebirdNew.exe
RCFILEOBJ=TestFirebirdNew_rc.o
RCFILESRC=TestFirebirdNew.rc
# debug
else
ifeq ($(CONFIG),debug)
WXWIN=C:/wx
GCCFLAGS=
CXX=g++.exe
CC=gcc.exe
RESCOMP=windres.exe
OUTPUTPATH=MinGWDebug
OBJECTPATH=MinGWDebug
BUILDPATHS=$(OBJECTPATH)
CPPFLAGS=-fno-pcc-struct-return -fstrict-aliasing -Wall -Wno-write-strings -D__WXMSW__ -D__GNUWIN32__ -D__WIN95__
WARNINGFLAGS=-Wall -Wno-write-strings
OPTFLAGS=-O0
DEBUGFLAGS=-D__WXDEBUG__ -ggdb
LINKERFLAGS=-Wl,--subsystem,windows -mwindows
LIBS=-lwxmsw28d_xrc -lwxmsw28d_richtext -lwxmsw28d_aui -lwxmsw28d_adv -lwxmsw28d_html -lwxmsw28d_core -lwxbase28d -lwxbase28d_net -lwxbase28d_xml -lwxtiffd -lwxjpegd -lwxpngd -lwxzlibd -lwxregexd -lwxexpatd -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
CPPINC=-I"$(WXWIN)/include" -I"$(WXWIN)/contrib/include" -I"$(WXWIN)/lib/gcc_lib/mswd"
LIBPATH=-L"$(WXWIN)/lib/gcc_lib"
RESPATH=--include-dir "$(WXWIN)/include" --include-dir "$(WXWIN)/contrib/include" --include-dir "$(WXWIN)/lib/gcc_lib/mswd"
PROGRAM=TestFirebirdNew.exe
RCFILEOBJ=TestFirebirdNew_rc.o
RCFILESRC=TestFirebirdNew.rc
# release
else
WXWIN=C:/wx
GCCFLAGS=
CXX=g++.exe
CC=gcc.exe
RESCOMP=windres.exe
OUTPUTPATH=MinGWRelease
OBJECTPATH=MinGWRelease
BUILDPATHS=$(OBJECTPATH)
CPPFLAGS= -fno-rtti -fno-pcc-struct-return -fstrict-aliasing -Wall -Wno-write-strings -D__WXMSW__ -D__GNUWIN32__ -D__WIN95__
WARNINGFLAGS=-Wall -Wno-write-strings
OPTFLAGS=-O
DEBUGFLAGS=
LINKERFLAGS=-Wl,--subsystem,windows -mwindows
LIBS=-lwxmsw28_xrc -lwxmsw28_richtext -lwxmsw28_aui -lwxmsw28_adv -lwxmsw28_html -lwxmsw28_core -lwxbase28 -lwxbase28_net -lwxbase28_xml -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregex -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
CPPINC=-I"$(WXWIN)/include" -I"$(WXWIN)/contrib/include" -I"$(WXWIN)/lib/gcc_lib/msw"
LIBPATH=-L"$(WXWIN)/lib/gcc_lib"
RESPATH=--include-dir "$(WXWIN)/include" --include-dir "$(WXWIN)/contrib/include" --include-dir "$(WXWIN)/lib/gcc_lib/msw"
PROGRAM=TestFirebirdNew.exe
RCFILEOBJ=TestFirebirdNew_rc.o
RCFILESRC=TestFirebirdNew.rc
endif
endif
endif
OBJECTS=$(OBJECTPATH)/all_in_one.o $(OBJECTPATH)/mainframe.o $(OBJECTPATH)/testfirebirdnewapp.o $(OBJECTPATH)/$(RCFILEOBJ)
all: $(BUILDPATHS) $(OUTPUTPATH)/$(PROGRAM)
$(OBJECTPATH):
-if not exist $(OBJECTPATH) mkdir $(OBJECTPATH)
clean:
-if exist $(OBJECTPATH)\*.o del $(OBJECTPATH)\*.o
-if exist $(OBJECTPATH)\*.res del $(OBJECTPATH)\*.res
-if exist $(OUTPUTPATH)\$(PROGRAM) del $(OUTPUTPATH)\$(PROGRAM)
help:
@echo "Usage: make -f makefile.gcc CONFIG=[unicodedebug|unicoderelease|debug|release] [all|clean|help]"
$(OUTPUTPATH)/$(PROGRAM): $(OBJECTS)
$(CXX) -o $@ $(OBJECTS) $(LIBPATH) $(LINKERFLAGS) $(LIBS)
$(OBJECTPATH)/$(RCFILEOBJ): $(RCFILESRC)
$(RESCOMP) --use-temp-file -i$< -o$@ $(RESPATH) --include-dir . --define NOPCH
$(OBJECTPATH)/all_in_one.o: ibpp/core/all_in_one.cpp ibpp/core/_ibpp.cpp ibpp/core/_ibpp.h ibpp/core/_dpb.cpp ibpp/core/_ibs.cpp ibpp/core/_rb.cpp ibpp/core/_spb.cpp ibpp/core/_tpb.cpp ibpp/core/array.cpp ibpp/core/blob.cpp ibpp/core/database.cpp ibpp/core/date.cpp ibpp/core/dbkey.cpp ibpp/core/events.cpp ibpp/core/exception.cpp ibpp/core/row.cpp ibpp/core/service.cpp ibpp/core/statement.cpp ibpp/core/time.cpp ibpp/core/transaction.cpp ibpp/core/user.cpp
$(CXX) -c -o $@ $(CPPFLAGS) $(GCCFLAGS) $(DEBUGFLAGS) $(OPTFLAGS) $(WARNINGFLAGS) $(CPPINC) ibpp\core\all_in_one.cpp
$(OBJECTPATH)/mainframe.o: mainframe.cpp ibpp/core/ibpp.h mainframe.h
$(CXX) -c -o $@ $(CPPFLAGS) $(GCCFLAGS) $(DEBUGFLAGS) $(OPTFLAGS) $(WARNINGFLAGS) $(CPPINC) mainframe.cpp
$(OBJECTPATH)/testfirebirdnewapp.o: testfirebirdnewapp.cpp testfirebirdnewapp.h mainframe.h
$(CXX) -c -o $@ $(CPPFLAGS) $(GCCFLAGS) $(DEBUGFLAGS) $(OPTFLAGS) $(WARNINGFLAGS) $(CPPINC) testfirebirdnewapp.cpp
.PHONY: all clean