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...:

Arquivo:Eclipse debug 01.png


Dê dois cliques em C++ Local Application, conforme figura abaixo:

Arquivo:Eclipse debug 02.png


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:

Arquivo:Eclipse debug 03.png


Localize e selecione o nome do executável na janela que aparece, conforme abaixo:

Arquivo:Eclipse debug 04.png


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:

Arquivo:Eclipse debug 05.png


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:

Arquivo:Eclipse debug 06.png


Escolha Path Mapping:

Arquivo:Eclipse debug 07.png


De volta na janela anterior, selecione o novo mapeamento e clique em Edit:

Arquivo:Eclipse debug 08.png


Recomendo que o nome do mapeamento seja alterado para algo mais significativo; a seguir, clique em Add...:

Arquivo:Eclipse debug 09.png


Digite /cygdrive/c/ no campo Compilation path: e C:\ no campo Local file system path: e clique em Ok:

Arquivo:Eclipse debug 10.png


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%
Ferramentas pessoais