BlackTDN Search

quinta-feira, 27 de novembro de 2008

Protheus IDE:: Compilação Condicional

Conforme prometi anteriormente, começarei a escrever à respeito de detalhes interessantes sobre o Protheus e que muita gente desconhece. Utilizarei como exemplo, desse e dos próximos artigos, o código fonte do game sudoku (outros, se necessário para o bom entendimento, poderão ser disponibilizados).

Hoje falarei sobre a compilação condicional no Protheus IDE e, de lambuja, mostrarei como se faz para adicionar a opção de "Compilação de Versão" ao "Totvs Development Studio" (nome bonitinho que inventaram na versão 10 para o nosso conhecidíssimo IDE).

Vamos ao que interessa. Como a maioria dos bons compiladores, o Protheus IDE possui o recurso de "Compilação Condicional" que nada mais é do que "diretivas/parâmetros" que são passadas ao pré-processador (sim, o Protheus tem um pré-processador) de forma a verificar se um determinado trecho do código irá fazer parte ou não, da compilação.

As diretivas de compilação condicional são semelhantes às do "clipper" e de outras linguagens no padrão xbase. As que são verificadas com mais freqüência, no Protheus, são aquelas relacionadas ao Tipo de Banco de Dados que será utilizado. Por exemplo:

#IFDEF TOP
//..Inclua esse trecho do código
#
ENDIF

Ou seja, o código entre #IFDEF#ENDIF só será, efetivamente compilado se a diretiva TOP estiver definida. No Protheus, a grande maioria das diretivas já estão embutidas no próprio IDE, que identifica qual o tipo de repositório em uso para defini-las.

As diretivas são interessantes e também são um ótimo recurso para o progamador Advpl que se bem utilizadas auxiliarão na depuração do código e/ou condicionarão a execução de um determinado trecho do programa de acordo com a sua definição ou não.

Por Exemplo, no programa u_sudoku.prg, em vários trechos do código existe a seguinte verificação:

#IFNDEF SODUKO_NO_CHANGE
//...
#
ENDIF

SODUKO_NO_CHANGE não é uma diretiva padrão do sistema mas uma definida pelo humilde programador que vos escreve. Ela foi usada para auxiliar-me a depurar o jogo. Ou seja, quando ela está definida, não é possível joga-lo efetivamente, apenas ver os valores de cada jogo.

Pergunta: Se SODUKO_NO_CHANGE não é uma diretiva do sistema, como Defini-la?

Existem duas formas, uma seria: #DEFINE SODUKO_NO_CHANGE e outra através de parâmetro do compilador /D ex.: /DSODUKO_NO_CHANGE. Na prática prefiro a segunda forma.

A imagem abaixo mostra como definir uma diretiva de compilação condicional do Protheus IDE.


A diretiva é definida na opção "Parâmetros".

As diretivas poderão ser verificadas como:

#IFDEF
//se for para testar se a
Diretiva está definida
#
ENDIF

ou

#IFNDEF

//pra verificar se a
Diretiva não está definida.
#
ENDIF


(Clique na imagem para amplia-la)

Observe que na imagem acima tem a opção "Compilar Versão" e que no seu Protheus IDE essa opção, provavelmente, não aparece. Para disponibiliza-la proceda da seguinte forma:

Feche o IDE, abra o arquivo totvsdevstudio.ini (para a versão 10 do Protheus IDE) ou, se estiver utilizando versão anterior do Protheus IDE (mp8,ap7,etc) o mp8ide.ini ou ap?ide.ini e inclua a seguinte chave:

[Version Generator Window]
Created=1
Left=0
Top=0
Height=159
Width=1272
Visible=1
Dock Host Site=DockSiteBottom
Dock Orientation=0
File
Name=

Salve o arquivo .ini e reabra o IDE. A aba "Compilar Versão" estará disponível. Mas para que serve essa configuração? Para a organização da forma de trabalho. Para que ter um único projeto (.prj) com todos as customizações, de todos os módulos, se podemos organizá-los por módulo (como no exemplo da imagem acima). E agora, já organizei os programas em seus respectivos projetos, como compilá-los todos de uma vez. É aí que entra essa opção. Selecione todos os projetos que deseja compilar e compile-os em uma só tacada. Essa opção permite gravar um "script" de compilação que possui a extensão .ver (de versão, acredito eu).

Nenhum comentário:

Postar um comentário