segunda-feira, setembro 11, 2006

Curso de wxWidgets, post 2: Configurando uma IDE e compilando o wxWidgets

Bom, vamos começar! Primeiro, escolha uma IDE para programar. Algumas sugestões:

Eclipse: minha IDE favorita. O problema é que não é muito leve, já que foi feita em Java e pra Java :) Mas eu recomendo, tem muitos recursos bons embutidos. Se decidir usar o Eclipse, você precisa instalar um plug-in chamado CDT, ele adiciona recursos para programação em C/C++ no Eclipse (como eu disse, ele foi feito pra Java). http://www.eclipse.org

MinGW Developer Studio: Uma espécie de clone do Microsoft Visual Studio. É leve e bem legal. O problema é que não está mais sendo desenvolvido. http://www.parinyasoft.com

Dev-C++: Uma IDE leve, desenvolvida em Delphi. Não tem muitos recursos como o Eclipse, mas também é agradável de usar. http://www.bloodshed.net

Todas essas IDEs usam o compilador GCC da GNU. O GCC é instalado junto com as IDEs. No caso do Eclipse, você precisa instalar o compilador a parte. Sendo assim, basta baixar o MinGW no site http://www.mingw.org (o link direto para o download da versão 5.0.2 é http://prdownloads.sf.net/mingw/MinGW-5.0.2.exe?download). Baixe também o MSYS (http://prdownloads.sf.net/mingw/MSYS-1.0.11-2004.04.30-1.exe?download), ele é uma espécie de shell para Windows, será necessário mais tarde para compilar o wxWidgets além de possuir alguns programas necessários para o Eclipse.

Se você usa Linux, baixe o Eclipse e certifique-se de que possui o GCC instalado na sua distribuição.

Instalando o MinGW e o MSYS

Se você estiver usando Linux, pule esta parte.

Primeiro, instale o MinGW. O executável vai baixar os pacotes selecionados da Internet e instalar em C:\MinGW. Faça a instalação completa, apesar de precisarmos apenas dos compiladores, do make e da API do Windows (Win32). A instalação é fácil (leia: next, next, next...) :P.

Após instalar o MinGW, vamos ao MSYS. Ele vai fazer uma instalação gráfica e em seguida vai abrir um prompt de comando. Ele vai perguntar onde o MinGW está instalado. Se estiver em C:\MinGW, responda como c:/mingw.

As instalações ainda não acabaram. Precisamos atualizar a variável de ambiente PATH. No Windows NT e seus derivados (2000, 2003 e XP), clique com o botão direito em “Meu Computador -> Propriedades”. Vá na aba “Avançado” e clique no botão “Variáveis de ambiente”. Procure pela variável “PATH” e clique em “Editar”. No final do valor da variável, adicione: ;C:\MinGW\bin;C:\msys\1.0\bin. No Windows 95, 98 e Me, edite C:\autoexec.bat para configurar o valor de PATH.

Isso fará com que os programas instalados possam ser acessados em qualquer diretório pelo prompt do DOS. Então vamos fazer um teste. Abra o prompt do DOS e execute primeiro gcc --version. Será exibida a versão do GCC instalado, significa que o MinGW foi instalado. Em seguida, tente o comando uname -a, esse comando vai mostrar a versão do Windows, significa que o MSYS foi instalado.

Se algum dos comandos não funcionar, tente refazer a instalação do programa que falhou.

Compilando o wxWidgets

Primeiro, baixe a biblioteca do site oficial em http://www.wxwidgets.org. Se estiver no Linux, baixe o wxGTK, no Windows, baixe o wxMSW.

Depois do download, é hora de compilar! No Linux, abra uma janela do terminal ou vá para o modo texto. No Windows, abra o MSYS.

Descompacte o código fonte do wxWidgets em um diretório qualquer e entre neste diretório:

$ cd /caminho/para/o/wx

Agora você vai precisar executar o script de configuração. Geralmente uso da seguinte forma (no Windows, troque o /usr/local/wx/2.6 para algo do tipo /c/wxMSW-2.6:

$ ./configure --prefix=/usr/local/wx/2.6 --disable-debug --enable-shared --disable-unicode

--prefix=/diretorio:
O diretório onde o wxWidgets vai ser instalado

--disable-debug:
Desabilita símbolos de debug (são usados para debugar no GDB)

--enable-shared:
Compila a biblioteca em vários arquivos .so ou .dll


--disable-unicode:
Desabilita o suporte a UNICODE (meio problemático no Windows 9x e NT, pois precisam de uma biblioteca a parte, por isso costumo desabilitar, não vamos escrever programas em árabe mesmo :P)


O script de configuração será executado e vai exibir um pequeno relatório no final. Leia a saída e verifique se condiz com a configuração feita.

Após feita a configuração, compile!

$ make

E depois de toda a compilação (pode demorar um pouco), instale!

$ make install

No Linux, basta agora executar ldconfig pra atualizar a lista de bibliotecas. No Windows, temos que copiar as DLLs pro diretório do sistema:

$ cp -af /c/wxMSW-2.6/lib/*.dll /c/WINDOWS/System32/

Também é necessário copiar uma DLL do MinGW:

$ cp -af /c/MinGW/bin/mingwm10.dll /c/WINDOWS/System32/

Pronto! wxWidgets e compiladores instalados.

Vamos fazer um pequeno teste

Abra sua IDE e copie o seguinte código fonte:

#include <wx/wx.h>

class MeuPrograma: public wxApp
{
public:
virtual bool OnInit(void);
};

class MeuFrame: public wxFrame
{
public:
MeuFrame(void);
};

bool MeuPrograma::OnInit(void)
{
MeuFrame *frame = new MeuFrame();
frame->Show();
SetTopWindow(frame);
return true;
}

MeuFrame::MeuFrame(void)
:wxFrame(NULL, wxID_ANY, wxT("Meu Programa"))
{
}

IMPLEMENT_APP(MeuPrograma)


Compile ele na sua IDE. Provavelmente ela ainda não vai estar configurada para usar o wxWidgets, mas você pode compilar manualmente, basta abrir um terminal ou o MSYS no Windows e digitar o comando:

$ g++ -o wx testewx.cpp `wx-config --cxxflags` `wx-config --libs`

No Windows, você vai precisar especificar o caminho do wx-config por completo, /c/wxMSW-2.6/bin/wx-config --cxxflags...):

$ g++ -o wx testewx.cpp `/c/wxMSW-2.6/bin/wx-config --cxxflags` `/c/wxMSW-2.6/bin/wx-config --libs`

E execute o programa:

$ ./wx

Você deverá ver uma janela vazia com o título “Meu Programa”. Esse é nosso “Hello, World”. No próximo post vou explicar esse programa com detalhes.

wxWidgets é isso aí! Se não deu certo, refaça tudo, passo a passo até achar o erro. Por enquanto, tente entender o código sozinho ou até mesmo modificá-lo.

Entendendo o wx-config e configurando sua IDE

Todo programador C/C++ sabe que ao usar a linha de comando, podemos passar alguns argumentos para o gcc e para o g++, como por exemplo, incluir uma biblioteca. Quem nunca usou -lm para incluir o math.h? O que o wx-config faz é justamente isso. Experimente executar wx-config --cxxflags e wx-config --libs no seu terminal. O que você vai ver são os argumentos que devem ser incluídos no g++ na hora de compilar (--cxxflags) e na hora de “linkar” (--libs).

Se você quer usar uma IDE para compilar seus programas em wxWidgets, você precisa inserir esses parâmetros nas propriedades do seu projeto. No Eclipse, por exemplo, basta clicar com o botão direito do mouse na pasta do projeto e escolher a opção “Properties” no menu de contexto. Clique em “C/C++ Build” no painel à esquerda e insira `wx-config --cxxflags` nos argumentos de comando do g++ em “GCC C++ Compiler” e `wx-config --libs` em “GCC C++ Linker”. Veja a figura abaixo:



Se estiver usando Windows, você precisa executar o wx-config no MSYS, copiar a saída e inserir no Eclipse. Ou, você pode configurar cada configuração individualmente (Preprocessor, Directories, Optimization...)

OBSERVAÇÃO: No Eclipse do Windows, substitua o /c da saída do wx-config por c:/. Por exemplo: ao invés de -I/c/wxMSW-2.6/include, use -Ic:/wxMSW-2.6/include.

8 comentários:

Anônimo disse...

beléssaaaaaa kapiãoooo
já configurei aki em casa...
no slackware com xfce..
tah blz...
eclipse + cdt + wxWidgets

Anônimo disse...

Algumas dicas para pessoas super-ocupadas ou preguiçosas (me enquadro na segunda opção!! :-)

Uso Ubuntu 6.06. Procurei no synaptic o eclipse e o eclipse-cdt. Instalei ambos.

Também procurei pelo wxwidgets. Ainda está com o nome antigo, wxwindows. Como o Just sugeriu (wxgtk), instalei
libwxgtk2.6-0
libwxgtk2.6-dbf
libwxgtk2.6-dev

Não configurei nada, não mexi em nada. Fui tentar a linha de comando que o Just indicou para compilar o Helloworld. Imaginei "nem a pau vai funcionar, deve ter que alterar alguma coisa...". Pois funfou de primeira!!! Eita, cabras da peste! (o wx e o Just!! RISOS)

Parti para o eclipse. Putz, não dá pra usar aquele trem não!! Lerdo pacas!! Parti pro meu velho e bom ANJUTA.

Coloquei o fonte lá e compilei. Erros e mais erros, não achou as bibliotecas.

Fui no menu definições|definições de compilação e linkedição. Já de cara apareceu um monte de bibliotecas que eu poderia ativar. Tinha a wxwindows. Marquei a dita e compilei novamente.

Nada feito. Reclamou que não achou wx-config (e o mesmo está instalado, pois é usado na linha de comando que o Just indicou e que funcionou, como falei acima).

Como eu continuava com preguiça para fuçadas mais profundas, desmarquei o wxwindows, e olhei nas outras abas. Encontrei a aba "opções", com 2 campos:

flags do compilador
flags do linker

Coloquei em cada uma delas, respectivamente, a saida do comando wx-config para --cflags e para --libs (é só fazer como o Just indicou, no terminal, e depois copiar e colar a saida nestes campos).

Compilei novamente. BELEZA! Funfou tudo!!

Abraços
Carlão

Anônimo disse...

Só na tua cabeça de merda que o eclipse foi feito pra java... eclipse eh gerenciador de plugins, nao foi feito pensando em linguagem alguma...

Dá próxima vez se informa antes de escrever alguma idiotice..

Anônimo disse...

Apenas para acrescentar um detalhe ao "how to" compilado pelo Just:

Em alguns casos, durante a compilação do wxWidget, ocorre um bug na definição de uma variável usada pelo source imagjpeg.cpp.
Passo a passo para corrigir:

1. Baixem o patch em [http://sourceforge.net/tracker/?func=detail&atid=309863&aid=1606032&group_id=9863]

2. Após baixado, abram o MSYS, cd $WXWIN, e digitem o comando para aplicar o patche: patch --unified --strip=0 --ignore-whitespace --forward --input=mypatch_2.6_BRANCH.patch

OBS: Msys pra quem ta usando o windows. No linux basta aplicar direto no dir.
É isso.

Anônimo disse...

Ah sim, não esquecer de rodar o make; make install novamente.

Anônimo disse...

Retirado do site do eclipse:

Eclipse IDE for Java Developers (85 MB)
The essential tools for any Java developer, including a Java IDE, a CVS client, XML Editor and Mylyn. More...
Downloads: 479,690

Só para responder a um post ai.

Anônimo disse...

Como consigo habilitar os acentos no wxWidigets ? to usando o 2.8.9

ja tentei com enable e disable unicode

Ajuda!

Unknown disse...

Encontra-se tão pouco material sobre o assunto. WxWidget está ultrapassada? Alguma opção gratuita para programar para desktop? (VS muito grande)