WXWIDGETS no Windows
De ccppbrasil.org
Tabela de conteúdo |
Introdução
Para você poder criar aplicações com interfaces gráficas em Windows, é necessário baixar e instalar algumas ferramentas. Abaixo segue uma lista do que você vai presicar. Como são oferecidas diversas opções e versões das diversas ferramentas oferecidas, não garantimos que este procedimento irá funcionar de imediato para a sua configuração, tanto das ferramentas quanto do próprio sistema operacional. Pode ser necessário que você faça alguma adaptação destas instruções para que tudo funcione adequadamente.
Você vai precisar das seguintes ferramentas:
- Cygwin
- wxWidgets
- wxGlade
- Eclipse e o módulo CDT
- wxDev-Cpp Dev-cpp turbinado com wxwidgets
Cygwin
Cygwin provê um ambiente Unix/Linux de desenvolvimento para Windows. Ele vem com as ferramentas que você normalmente encontra em distribuições Unix ou Linux. Você pode combinar estas ferramentas com outras ferramentas de linha de comando do próprio Windows para aumentar a flexibilidade do seu sistema operacional Windows, entre outras coisas.
Obtenção
Visite o site do Cygwin para saber como baixar o programa de instalação.
Instalação
Com o programa de instalação do Cygwin já rodando, instale os seguintes pacotes (mínimo):
- categoria "base":
- todos(default)
- categoria "devel":
- binutils
- distcc (opcional)
- gcc-core
- gcc-g++
- gdb
- libtool
- make
- categoria "graphics":
- libjpeg-devel
- libtiffxx-devel
- categoria "net":
- open-ssh
- categoria "shells":
- ash
- bash
A partir deste ponto em diante, o diretório em que você instalou o Cygwin será referenciado como %CYGWIN%. Por exemplo, se você instalou o Cygwin em C:\cygwin, then you will replace all future references to %CYGWIN% in this document with C:\cygwin.
Acrescente ao caminho (PATH) da sua seção de Windows o diretório %CYGWIN% [1].
wxWidgets
wxWidgets (anteriormente conhecido por wxWindows,) é um framework para C++ que permite que você escreva interfaces gráficas de usuário (GUIs) de aplicações em C++ de modo independente de plataforma (ou cross-platform). Em essência, você poderá escrever uma aplicação usando a wxWidgets e fazê-la rodar em qualquer plataforma para a qual existam bibliotecas wxWidgets.
Obtenção
Visite o site da wxWidgets e baixe o conjunto de fontes genéricos, ou seja, o que contém todas as plataformas.
Instalação dos fontes
Instale wxWidgets na pasta raíz do seu computador, preferencialmente. Deste ponto em diante, o diretorio em que você instalou a wxWidgets será referenciado como %WX% ou $WX conforme o ambiente Windows ou Cygwin, respectivamente. Por exemplo, se você instalou wxWidgets em C:\wxWidgets-2.8.4, então você irá substituir todas as futuras referencias a %WX% ou $WX neste documento por C:\wxWidgets-2.8.4 ou deixar o seu processador de comandos fazer isto por você (uma vez que este formato é o de uma variável de sistema);
Variáveis de sistema
Acrescente as variáveis de sistema para o Windows chamadas WX, WXP1, WXP2, ... , WXP8, TODOS COMO CHAVES REG_EXPAND_SZ, ou seja, criar sempre como novo "Valor de seqüência expansível", ou usando o arquivo de registro abaixo, salvando-o como, por exemplo, wx.reg e o importando para o registro, sempre usando o programa regedit.exe;
- WX = C:\wxWidgets-2.8.4
- WXP1 = lib\gtk2-ansi-debug-2.8
- WXP2 = lib\gtk2-ansi-release-2.8
- WXP3 = lib\gtk2-ansi-debug-static-2.8
- WXP4 = lib\gtk2-ansi-release-static-2.8
- WXP5 = lib\msw-ansi-debug-2.8
- WXP6 = lib\msw-ansi-release-2.8
- WXP7 = lib\msw-ansi-debug-static-2.8
- WXP8 = lib\msw-ansi-release-static-2.8
Note que o efeito de se inserir estas variáveis pelas telas "apropriadas" de administração do Windows não é o mesmo. Estes caminhos vão inserir variáveis de seqüência e não variáveis de seqüência expansível.
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment] "CYGWIN"="C:\\cygwin" "WX"=hex(2):43,00,3a,00,5c,00,77,00,78,00,57,00,69,00,64,00,67,00,65,00,74,00,\ 73,00,2d,00,32,00,2e,00,38,00,2e,00,34,00,00,00 "WXP1"=hex(2):6c,00,69,00,62,00,5c,00,67,00,74,00,6b,00,32,00,2d,00,61,00,6e,\ 00,73,00,69,00,2d,00,64,00,65,00,62,00,75,00,67,00,2d,00,32,00,2e,00,38,00,\ 00,00 "WXP2"=hex(2):6c,00,69,00,62,00,5c,00,67,00,74,00,6b,00,32,00,2d,00,61,00,6e,\ 00,73,00,69,00,2d,00,72,00,65,00,6c,00,65,00,61,00,73,00,65,00,2d,00,32,00,\ 2e,00,38,00,00,00 "WXP3"=hex(2):6c,00,69,00,62,00,5c,00,67,00,74,00,6b,00,32,00,2d,00,61,00,6e,\ 00,73,00,69,00,2d,00,64,00,65,00,62,00,75,00,67,00,2d,00,73,00,74,00,61,00,\ 74,00,69,00,63,00,2d,00,32,00,2e,00,38,00,00,00 "WXP4"=hex(2):6c,00,69,00,62,00,5c,00,67,00,74,00,6b,00,32,00,2d,00,61,00,6e,\ 00,73,00,69,00,2d,00,72,00,65,00,6c,00,65,00,61,00,73,00,65,00,2d,00,73,00,\ 74,00,61,00,74,00,69,00,63,00,2d,00,32,00,2e,00,38,00,00,00 "WXP5"=hex(2):6c,00,69,00,62,00,5c,00,6d,00,73,00,77,00,2d,00,61,00,6e,00,73,\ 00,69,00,2d,00,64,00,65,00,62,00,75,00,67,00,2d,00,32,00,2e,00,38,00,00,00 "WXP6"=hex(2):6c,00,69,00,62,00,5c,00,6d,00,73,00,77,00,2d,00,61,00,6e,00,73,\ 00,69,00,2d,00,72,00,65,00,6c,00,65,00,61,00,73,00,65,00,2d,00,32,00,2e,00,\ 38,00,00,00 "WXP7"=hex(2):6c,00,69,00,62,00,5c,00,6d,00,73,00,77,00,2d,00,61,00,6e,00,73,\ 00,69,00,2d,00,64,00,65,00,62,00,75,00,67,00,2d,00,73,00,74,00,61,00,74,00,\ 69,00,63,00,2d,00,32,00,2e,00,38,00,00,00 "WXP8"=hex(2):6c,00,69,00,62,00,5c,00,6d,00,73,00,77,00,2d,00,61,00,6e,00,73,\ 00,69,00,2d,00,72,00,65,00,6c,00,65,00,61,00,73,00,65,00,2d,00,73,00,74,00,\ 61,00,74,00,69,00,63,00,2d,00,32,00,2e,00,38,00,00,00 "PATH_"=hex(2):3b,00,25,00,43,00,59,00,47,00,57,00,49,00,4e,00,25,00,5c,00,62,\ 00,69,00,6e,00,3b,00,25,00,43,00,59,00,47,00,57,00,49,00,4e,00,25,00,5c,00,\ 75,00,73,00,72,00,5c,00,58,00,31,00,31,00,52,00,36,00,5c,00,62,00,69,00,6e,\ 00,3b,00,25,00,57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,31,00,25,00,\ 3b,00,25,00,57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,32,00,25,00,3b,\ 00,25,00,57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,33,00,25,00,3b,00,\ 25,00,57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,34,00,25,00,3b,00,25,\ 00,57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,35,00,25,00,3b,00,25,00,\ 57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,36,00,25,00,3b,00,25,00,57,\ 00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,37,00,25,00,3b,00,25,00,57,00,\ 58,00,25,00,5c,00,25,00,57,00,58,00,50,00,38,00,25,00,00,00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager\Environment] "CYGWIN"="C:\\cygwin" "WX"=hex(2):43,00,3a,00,5c,00,77,00,78,00,57,00,69,00,64,00,67,00,65,00,74,00,\ 73,00,2d,00,32,00,2e,00,38,00,2e,00,34,00,00,00 "WXP1"=hex(2):6c,00,69,00,62,00,5c,00,67,00,74,00,6b,00,32,00,2d,00,61,00,6e,\ 00,73,00,69,00,2d,00,64,00,65,00,62,00,75,00,67,00,2d,00,32,00,2e,00,38,00,\ 00,00 "WXP2"=hex(2):6c,00,69,00,62,00,5c,00,67,00,74,00,6b,00,32,00,2d,00,61,00,6e,\ 00,73,00,69,00,2d,00,72,00,65,00,6c,00,65,00,61,00,73,00,65,00,2d,00,32,00,\ 2e,00,38,00,00,00 "WXP3"=hex(2):6c,00,69,00,62,00,5c,00,67,00,74,00,6b,00,32,00,2d,00,61,00,6e,\ 00,73,00,69,00,2d,00,64,00,65,00,62,00,75,00,67,00,2d,00,73,00,74,00,61,00,\ 74,00,69,00,63,00,2d,00,32,00,2e,00,38,00,00,00 "WXP4"=hex(2):6c,00,69,00,62,00,5c,00,67,00,74,00,6b,00,32,00,2d,00,61,00,6e,\ 00,73,00,69,00,2d,00,72,00,65,00,6c,00,65,00,61,00,73,00,65,00,2d,00,73,00,\ 74,00,61,00,74,00,69,00,63,00,2d,00,32,00,2e,00,38,00,00,00 "WXP5"=hex(2):6c,00,69,00,62,00,5c,00,6d,00,73,00,77,00,2d,00,61,00,6e,00,73,\ 00,69,00,2d,00,64,00,65,00,62,00,75,00,67,00,2d,00,32,00,2e,00,38,00,00,00 "WXP6"=hex(2):6c,00,69,00,62,00,5c,00,6d,00,73,00,77,00,2d,00,61,00,6e,00,73,\ 00,69,00,2d,00,72,00,65,00,6c,00,65,00,61,00,73,00,65,00,2d,00,32,00,2e,00,\ 38,00,00,00 "WXP7"=hex(2):6c,00,69,00,62,00,5c,00,6d,00,73,00,77,00,2d,00,61,00,6e,00,73,\ 00,69,00,2d,00,64,00,65,00,62,00,75,00,67,00,2d,00,73,00,74,00,61,00,74,00,\ 69,00,63,00,2d,00,32,00,2e,00,38,00,00,00 "WXP8"=hex(2):6c,00,69,00,62,00,5c,00,6d,00,73,00,77,00,2d,00,61,00,6e,00,73,\ 00,69,00,2d,00,72,00,65,00,6c,00,65,00,61,00,73,00,65,00,2d,00,73,00,74,00,\ 61,00,74,00,69,00,63,00,2d,00,32,00,2e,00,38,00,00,00 "PATH_"=hex(2):3b,00,25,00,43,00,59,00,47,00,57,00,49,00,4e,00,25,00,5c,00,62,\ 00,69,00,6e,00,3b,00,25,00,43,00,59,00,47,00,57,00,49,00,4e,00,25,00,5c,00,\ 75,00,73,00,72,00,5c,00,58,00,31,00,31,00,52,00,36,00,5c,00,62,00,69,00,6e,\ 00,3b,00,25,00,57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,31,00,25,00,\ 3b,00,25,00,57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,32,00,25,00,3b,\ 00,25,00,57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,33,00,25,00,3b,00,\ 25,00,57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,34,00,25,00,3b,00,25,\ 00,57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,35,00,25,00,3b,00,25,00,\ 57,00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,36,00,25,00,3b,00,25,00,57,\ 00,58,00,25,00,5c,00,25,00,57,00,58,00,50,00,37,00,25,00,3b,00,25,00,57,00,\ 58,00,25,00,5c,00,25,00,57,00,58,00,50,00,38,00,25,00,00,00
Ainda no "regedit", acrescente ao caminho (PATH) o texto contido na variável PATH_, recém incluida pelo arquivo acima, a saber:
;%CYGWIN%\bin;%CYGWIN%\usr\X11R6\bin;%WX%\%WXP1%;%WX%\%WXP2%;%WX%\%WXP3%;%WX%\%WXP4%;%WX%\%WXP5%;%WX%\%WXP6%;%WX%\%WXP7%;%WX%\%WXP8% [2] ;
Note que o PATH deve ser alterado em HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment e HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager\Environment;
Compilação
Copie o texto abaixo para o arquivo build.sh (com terminações de linha no estilo "UNIX") na pasta raíz do sistema C:\ ou /cygdrive/c/:
#!/bin/bash
build() {
cd $WX
if [ -e newbuild ] ; then rm -fR newbuild ; fi ; mkdir newbuild
cd newbuild
echo `date +"%Y/%b/%d %H:%M:%S"` " - starting config" $compmode $guimode $PARAMS >> $WX/build.log
if [ "$guitype" == "gtk" ]
then
../configure --build=i686-pc-$compmode --disable-precomp-headers --enable-official_build --without-expat --with-$guimode --enable-universal --with-opengl --with-libpng --with-odbc --disable-unicode $PARAMS >> $WX/build.log 2>> $WX/build.log
else
../configure --build=i686-pc-$compmode --disable-precomp-headers --enable-official_build --without-expat --with-$guimode --with-opengl --with-libpng --with-odbc --disable-unicode $PARAMS >> $WX/build.log 2>> $WX/build.log
fi
echo `date +"%Y/%b/%d %H:%M:%S"` " - running make - see log " $makelog >> $WX/build.log
make -j 2 > $WX/$makelog 2> $WX/$makelog
err=$?
if [ "$err" == "0" ]
then
# if [ "$k" == "release" ]
# then
# echo `date +"%Y/%b/%d %H:%M:%S"` " - stripping release files" >> $WX/build.log
# cd lib/
# for m in *
# do
# strip $m >/dev/null 2>/dev/null
# done
# cd ..
# fi
echo `date +"%Y/%b/%d %H:%M:%S"` " - moving & fixing files" >> $WX/build.log
cd lib/wx/config
a=`ls $guitype*`
b=`echo $a"_prov"`
c=`echo $a"_old"`
sed1=s[/wx-2.8[[
sed2=s[/usr/local[$WX[
sed3=s[\$\{exec_prefix\}/lib[\$\{exec_prefix\}/lib/$a[
sed4=s[\$exec_prefix/lib[\$exec_prefix/lib/$a[
cat $a | sed -e $sed1 -e $sed2 -e $sed3 -e $sed4 > $b
mv $a $c
mv $b $a
cd ../../..
mkdir ../lib/$a
#cp demos/life/Makefile ../makefiles/Makefile-$a
cp -a lib/* ../lib/$a/
#cp -a lib/* ../lib/
cd ..
echo `date +"%Y/%b/%d %H:%M:%S"` " - finishing" >> $WX/build.log
else
echo `date +"%Y/%b/%d %H:%M:%S"` " - * * * * * * ABORTING * * * * * *" >> $WX/build.log
fi
echo "*********************************************************************" >> $WX/build.log
}
#if ! [ -e $WX/makefiles ] ; then mkdir $WX/makefiles ; fi
if [ -e $WX/build.log ] ; then rm $WX/build.log ; fi
#for i in gtk msw
for i in msw
do
for j in static shared
do
for k in release debug
do
echo `pwd` >> $WX/build.log
if [ $i == gtk ]
then
guimode='gtk=2'
guitype=gtk
compmode=cygwin
export CFLAGS=""
export CPPFLAGS=""
export CXXFLAGS=""
export LDFLAGS="-mwindows"
else
guimode=msw
guitype=msw
compmode=cygwin
export CFLAGS=""
export CPPFLAGS=""
export CXXFLAGS=""
export LDFLAGS="-mwindows"
fi
if [ $k == release ]
then
PARAMS="--disable-debug --enable-optimise"
else
PARAMS="--enable-debug --enable-debug_flag --enable-debug_gdb --enable-debug_info"
fi
if [ $j == static ]
then
PARAMS=`echo $PARAMS" --disable-shared"`
else
PARAMS=`echo $PARAMS" --enable-shared"`
fi
makelog="$i"_"$j"_"$k".log
eval build
done
done
done
if [ "$err" == "0" ]
then
makelog=samples_utils_demos.log
echo `date +"%Y/%b/%d %H:%M:%S"` " - starting samples + utils + demos" >> $WX/build.log
cd $WX/newbuild
make -j 2 samples > $WX/$makelog 2> $WX/$makelog
echo `date +"%Y/%b/%d %H:%M:%S"` " - finishing samples" >> $WX/build.log
cp -a samples/* ../samples/
cd utils
make -j 2 >> $WX/$makelog 2>> $WX/$makelog
echo `date +"%Y/%b/%d %H:%M:%S"` " - finishing utils" >> $WX/build.log
cd ..
cp -a utils/* ../utils/
cd demos
make -j 2 >> $WX/$makelog 2>> $WX/$makelog
echo `date +"%Y/%b/%d %H:%M:%S"` " - finishing demos" >> $WX/build.log
cd ..
cp -a demos/* ../demos/
cd ..
cd ..
rm -fR newbuild
echo `date +"%Y/%b/%d %H:%M:%S"` " - completely finished" >> $WX/build.log
fi
digite os comandos a seguir para iniciar o script acima:
cd $WX export WX=`pwd` ./build.sh
é só aguardar a finalização.
wxGlade
(em construção)
Obtenção e Instalação
Visite o site do wxGlade, baixe e instale a versão mais recente (atualmente a 0.5)
Uso
Veja o tutorial oficial, mais este tutorial e seu manual.
Eclipse e o módulo CDT
O Eclipse é um "IDE" muito poderoso, que fornece uma flexibilidade incrível com o uso de módulos do tipo "plug-in". O Eclipse já vem como um poderoso IDE para Java. Você pode baixar o módulo CDT para desenvolver projetos em C e C++.
Obtenção e Instalação
A primeira coisa que você vai precisar baixar é o Eclipse.
Visite o site do Eclipse para saber como baixar e instalar este programa.
Visite o site do CDT para saber como baixar e instalar este módulo.
Uso
Makefile e Makefile.dep
o script Makefile abaixo foi desenvolvido para projetos relativamente simples. Deve ser copiado para todo e qualquer projeto, e funciona da seguinte forma:
- procura por todos os arquivos *.cpp e *.rc do diretório atual e os compila em objetos relocáveis *.o;
- age da mesma forma na pasta das dependências (caso as haja) ;
- liga (link) todos os relocáveis em um executável com o nome do diretório;
Para se alterar de um build em modo release ou debug, pode-se alterar as variáveis iniciais do Makefile para corresponder ao que se deseja.
Note que o arquivo abaixo contem espaços e caracteres de tabulação para fazer a indentação. Isto foi proposital, não altere!
# Makefile - finds all *.cpp on the project directory, compiles them into
# objects and links them in an executable named after the current directory;
#may be "msw" or "linux" - must keep lower case!
platform := "msw"
#may be "ansi" or "utf-8" - "ansi" should be selected for cygwin
charset := "ansi"
#may be "shared" or "static"
compilemode := "shared"
debug_flags := -g -g3 -ggdb -O0
release_flags := -O2
release_compression_flags := --best --all-filters --all-methods --force # this may take a few minutes
#release_compression_flags := --best # this one takes just a few seconds
#may be $(release_flags) or $(debug_flags) - issue a "clean" after modifying
optimization:= $(debug_flags)
wx_release := "2.8"
#internals: DO NOT EDIT BEYOND THIS POINT - unless you know what you're doing
# entry point for dependencies declared in an external file; if it is missing,
# there will be no error condition because of the "-" at the beginning;
-include Makefile.dep
#try to autodetect Linux
ifeq (,$(WX))
platform := "linux"
exe_extn := ""
extra_libs := ""
else
ifeq ("shared",$(compilemode))
compilemode := ""
else
compilemode := $(compilemode)"-"
endif
ifeq ($(release_flags),$(optimization))
mode := $(platform)"-"$(charset)"-release-"$(compilemode)$(wx_release)
wxmode :=
else
mode := $(platform)"-"$(charset)"-debug-"$(compilemode)$(wx_release)
wxmode := --debug=yes
endif
extra_libs := "z rpcrt4 oleaut32 ole32 uuid odbc32 ole32 oleaut32 winspool winmm shell32 comctl32 comdlg32 ctl3d32 advapi32 wsock32 gdi32 kernel32 user32"
exe_extn := .exe
endif
projectname := $(shell basename "`pwd`")$(exe_extn)
relocobject := $(patsubst %.cpp,%.cpp.o,$(wildcard *.cpp))
ifneq (,$(depincfont))
relocobject := $(relocobject) $(patsubst %.cpp,%.cpp.o,$(depincfont))
endif
ifneq ($(platform),"linux")
resouceobj := $(patsubst %.rc,%.rc.o,$(wildcard *.rc))
endif
ifeq ($(platform),"linux")
# Linux
globalcompparam := $(shell wx-config-2.6 --cppflags)
globallnkrparam := $(shell wx-config-2.6 --libs)
else
# MSW
ifeq (,$(depincdirs))
globalcompparam := $(shell \
$(WX)/lib/$(mode)/wx/config/$(mode) --cppflags $(wxmode))
else
globalcompparam := -I$(depincdirs) $(shell \
$(WX)/lib/$(mode)/wx/config/$(mode) --cppflags $(wxmode))
endif
globallnkrparam := $(shell \
$(WX)/lib/$(mode)/wx/config/$(mode) --libs $(wxmode))
endif
ifneq (,$(deplibfont))
globallnkrparam := $(globallnkrparam) \
$(join $(foreach dir, $(deplibdir), -L ), $(deplibdir)) \
$(join $(foreach lib, $(deplibfont), -l ), $(deplibfont)) \
$(join $(foreach lib, $(extra_libs), -l ), $(extra_libs))
endif
prov := "dir "
prov := $(prov)$(shell $(WX)/lib/$(mode)/wx/config/$(mode) --cppflags $(wxmode) | sed -e 's/-D.*//' -e 's/-I//g' -e 's/\ /:/g' )
prov := $(prov)$(shell echo $(PATH) | sed 's/\/cygdrive.*//' )
prov := $(shell echo $(prov)`pwd` > "$(HOME)"/.gdbinit )
.PHONY: all
all: $(projectname)
$(projectname): $(relocobject) $(resouceobj)
#@echo $(prov)
g++ $(optimization) -o $(projectname) $(relocobject) $(resouceobj) \
$(globallnkrparam)
ifeq ("$(release_flags)","$(optimization)")
@strip $(projectname)
# uncoment bellow if you have UPX installed
#@/cygdrive/c/Arquiv~1/upx/upx.exe $(release_compression_flags) $(projectname)
endif
$(relocobject): %.cpp.o : %.cpp
$(CC) $(optimization) -c -o $@ $(globalcompparam) $<
ifneq ($(platform),"linux")
%.rc.o : %.rc
windres -i$< -o $@ $(globalcompparam)
endif
.PHONY: clean
clean:
-@rm $(projectname) $(relocobject) $(resouceobj) >/dev/null 2>/dev/null
.PHONY: cleanobjs
cleanobjs:
-@rm $(relocobject) $(resouceobj) > /dev/null 2> /dev/null
opcionalmente pode ser necessário especificar dependências externas ao projeto, dependências estas colocadas em um arquivo de inclusão Makefile.dep. Veja o exemplo abaixo:
# dependencies # folders where the source code files to be compiled into object-files are located depincdirs := ../resistor # source code files to be compiled into object-files depincfont := ../resistor/res.cpp # folders where extra libraries are located deplibdir := ../libserial-mt # extra libraries deplibfont := serial-mt
para executar manualmente, é só aplicar um dos comandos abaixo dentro de um shell do Cygwin:
make -f <caminho até o local do arquivo acima>/Makefile all
ou
make -f <caminho até o local do arquivo acima>/Makefile clean
ou ainda
make -f <caminho até o local do arquivo acima>/Makefile cleanobjs
No Eclipse, basta digitar Ctrl-B que o construtor será executado.
Teste em linha de comando
(em construção)
No Cygwin , dentro do prompt do usuário, acrescente os comandos abaixo no arquivo .bash_profile :
cd $WX && export WX=`pwd` ; cd
No caso de se desejar usar o "distcc", acrescente os comandos abaixo:
export DISTCC_HOSTS="localhost 10.2.1.146 10.2.1.138 10.2.1.145" distccd --daemon --jobs 4 --allow `echo $DISTCC_HOSTS | cut -d' ' -f2-99` && # em estudo o uso do 'distcc' - basta substituir "distcc" por "g++" para reverter alias make="make -j4 CC=distcc"
No Linux, isto fica mais simples, uma vez que o "distcc" já deve estar configurado pela administração do sistema.
Configuração do Eclipse
Para usar o Makefile acima no Eclipse, siga os passos abaixo:
- Com o Eclipse aberto, no menu superior principal, clique em Window e a seguir, no menu que se abre, em Preferences, e a tela de configurações preferencias aparecerá;
- Aprofundando-se nas opções de C/C++, a seguir em Make e por fim em New Make Projects a tela de configurações deve ficar como na figura abaixo - note que o mouse está sobre um checkbox opcional, de acordo com sua preferência:
Arquivo:Eclipse new make 1.png
- Após estes ajustes, na aba seguinte, Environment, devem ser acrescentadas duas variáveis de ambiente, WX e CC, conforme mostra a figura abaixo:
Arquivo:Eclipse new make 2.png
- Crie um novo projeto "Standard Make C++ Project" com o nome que desejar;
- Na janela de detalhes do projeto, na aba "Make Builder", verifique as configurações estão aparecendo como especificadas acima;
- Na mesma janela, agora na aba "Environment" verifique se as variáveis WX e CC também estão em conformidade com o especificado acima;
- Clique em Finish;
- Crie um novo conjunto de arquivos de código-fonte ou os copie de algum projeto de exemplo do próprio wxWidgets na pasta deste novo projeto, e também copie o Makefile acima também para esta pasta;
- Tecle "Ctrl-B" para provocar um build do projeto - provavelmente surgirão diversos erros de compilação;
- No menu principal do Eclipse, clique em Project em a seguir em Properties;
- Selecione C/C++ Include Paths and Symbols e clique no botão Add External Include Path...
- Inclua os caminhos C:\wxWidgets-2.8.4\lib\msw-ansi-release-2.8\wx\include\msw-ansi-release-2.8 e C:\wxWidgets-2.8.4\include, como mostra a figura abaixo:
Arquivo:Eclipse include paths.png
Em novos projetos (não entendi, mas não importa), os diretórios de inclusão já estarão configurados, portanto a criação de novos projetos será bem mais simples.
E é isso aí! Se quiser fazer um build para debug, é possível alterar as variáveis do Makefile.
Debug no Eclipse com o gdb do Cygwin
Este artigo não pretende ser um recurso de informações sobre o funcionamento intrínseco das ferramentas recomendadas, mas como tive dificultade em encontrar estas informações abaixo, segue um guia - sem profundidade - mas que permite que se tenha um ponto de partida.
Para fazer o debug usando o gdb do cygwin, é necessário (basicamente) o procedimento a seguir, sendo que vários passos servem para qualquer tipo de debug:
Defina algum 'breakpoint' no código fonte.
Clique na pequena seta ao lado do botão de debug, conforme a figura abaixo, e no menu que aparece, selecione Debug...:
Dê dois cliques em C++ Local Application, conforme figura abaixo:
O Eclipse vai recuperar dados do projeto aberto, com a exceção do nome do executável; clique no botão Search Project, conforme a figura abaixo:
Localize e selecione o nome do executável na janela que aparece, conforme abaixo:
De volta a janela de configuração de debug, na guia Debugger, escolha o Cygwin gdb, remova a opção de Stop on startup at (uma vez que o main deixa de ser significativo em projetos com a wxWidgets), conforme figura abaixo; a seguir, clique nos botões Apply e Debug:
O Eclipse irá mostrar uma mensagem sobre não conseguir encontrar os arquivos de código-fonte; pressione o botão Edit Source Lookup Path e, na janela que se abre, em Add, conforme segue:
Escolha Path Mapping:
De volta na janela anterior, selecione o novo mapeamento e clique em Edit:
Recomendo que o nome do mapeamento seja alterado para algo mais significativo; a seguir, clique em Add...:
Digite /cygdrive/c/ no campo Compilation path: e C:\ no campo Local file system path: e clique em Ok:
A partir deste ponto, o Eclipse irá se comportar como esperado.
wxDev-Cpp
O Dev-cpp é uma IDE feita em delphi , utilizada para programar em Pascal(FreePascal) ou C/C++ (MingW). A wxDev-Cpp é uma versão turbinada, com templates da wxWidgets, podendo ser utilizada no lugar da wxGlade.
Mais informações voe pode obter no site oficial: http://wxdsgn.sourceforge.net/
Mudando o PATH no Windows
Execute o programa "regedit", usando o botão "Iniciar" e "Executar", que abre a seguinte janela, onde se deve digitar "regedit" e clicar em "Ok":
<figura do lançamento do regedit>
Nas chaves:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment
e
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager\Environment
acrescente ao fim (normalmente) da variável "Path" (que contém texto que começa com "%SystemRoot%\system32;%SystemRoot%;...") o texto referente ao diretório que se deseja incluir para busca automática de executáveis e bibliotecas, incluindo-se um ";" inicial, como no exemplo abaixo:
;%CYGWIN%\bin;%CYGWIN%\usr\X11R6\bin;%WX%\%WXP1%;%WX%\%WXP2%;%WX%\%WXP3%;%WX%\%WXP4%;%WX%\%WXP5%;%WX%\%WXP6%;%WX%\%WXP7%;%WX%\%WXP8%
