Posts tagged ‘gnumake’

可以定制:

  • OUTPUTPATH 输出路径(debug)
  • OBJS 需要编译的对象
  • LIBS 需要链接的库
OUTPUTPATH=debug
OBJECTPATH=debug
SRCPATH=src
LIBPATH=lib
BUILDPATHS=$(OBJECTPATH)

OBJS =	$(OBJECTPATH)\test.o
LIBS = lib\libfftw.a

TARGET = $(OUTPUTPATH)\test.exe

CXXFLAGS =	-O2 -g -Wall -fmessage-length=0

$(TARGET):	$(OBJS)
	$(CXX) ${CXXFLAGS} -o $(TARGET) $(OBJS) $(LIBS)

$(OBJS): $(OBJECTPATH)\\%.o: $(SRCPATH)\\%.cpp
	$(CXX) -c $< -o $@

all:	$(OBJECTPATH) $(TARGET)

clean:
	del /F $(OBJS) $(TARGET)

$(OBJECTPATH):
	-if not exist $(OBJECTPATH) mkdir $(OBJECTPATH)

.PHONY: all clean

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

Continue reading ‘在 MinGW(MSYS)里编译 wxWidgets’ »