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
#ENDIFOu 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
//...
#ENDIFSODUKO_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).
Comentários
Postar um comentário