Compilação Condicional

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

JefTookuni
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 15 Dez 2009 17:58
Localização: Paraná

Compilação Condicional

Mensagem por JefTookuni »

Galera se alguém puder me ajudar ficaria muito agradecido;
Estou com o seguinte problema, converti um sistema de clipper para xharbour, no entranto era utilizado alguns parâmetros de compilação no rtlink, porém não consigo utilizá-los no hbmake. Haviam duas formas de compilação, cada uma com algumas configurações diferentes em saus definições, tenho o arquivo de linkagem .bc do hbmake com as definições padrão para as duas formas, porém não consigo passar mais nenhuma na compilação sem alterar esse arquivo (-D). Teria como fazer??

No fonte utilizava o seguinte:

#ifDef X (Padrão compilação tipo 1)
Configuracões
#endif

#ifdef Y (Padrão compilação tipo 2)
Comfigurações
#endif

#ifdef Z (Padrão compilação tipo 1e 2)
Configurações
#endif

Haveria como passar as definições sem alterar o arquivo de linkagem? ambos utilizam os mesmos programas, porém as configurações são diferentes.

Agradeço desde já
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Re: Compilação Condicional

Mensagem por clodoaldomonteiro »

Eu fiz a converssão, pois usara clipper + GAS.lib e ainda uso essas configurações.
Veja o q o manual do xHarbour comercial diz:

Código: Selecionar todos

#ifdef
Compiles a section of code depending on the presence of a #define constant. 
Syntax
#ifdef <constant>
  <statements1>
[ #else
  <statements2> ]
#endif

Arguments
<constant> 
This is the symbolic name of a #define constant. 
<statements1> .. <statements2> 
These are program statements to include or exclude in the preprocessor output. <statements1> is included when <constant> is defined. Otherwise, the statements following #else, if present, are included. Description
The #ifdef..#else..#endif directives are used for conditional compilation. They work similar to the IF..ELSE..ENDIF statements, but are resolved by the preprocessor, rather than the compiler. #ifdef tests if a #define constant exists. When the constant is defined, the statements following #ifdef are included in the preprocessor output. When the constant does not exist, the statements folowing #else, if present, are used. #endif closes the conditional compilation block. 
Info
See also: #define, #if, #ifndef, #undef 
Category: Preprocessor directives 

Example
// The example demonstrates how to implement an extended error
// checking in the DEBUG version of a program. When DEBUG is not
// defined, all ErrCheck() pseudo-functions are removed from
// the PRG code by the preprocessor.

   #define DEBUG

   #ifdef DEBUG
      #xtranslate ErrCheck(<errCond>,<msg>) => ;
         IF (<errCond>) ;;
            IF Alert( "Error:;"+<(msg)>,{"Continue","Ouit"}) <> 1 ;;
               QUIT ;;
            ENDIF ;;
         ENDIF
   #else
      #xtranslate ErrCheck(<errCond>,<msg>) =>
   #endif

   PROCEDURE Main( cParams )
      ErrCheck( Empty(cParams), "Command line params missing" )

      ? "Error check OK"
   RETURN

At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
JefTookuni
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 15 Dez 2009 17:58
Localização: Paraná

Re: Compilação Condicional

Mensagem por JefTookuni »

Então continuo usando as diretivas poré eu as definia na compilação, agora me encontro com o problema pois se tento passar o parâmetro para o hbmake ele pede se vou alterar o arquivo .bc, eu queria encontrar uma forma de passar esse parâmetro pra ser definido sem ter que mexer com o arquivo .bc, pois versiono meus fontes. Na sua conversão como ficou?
Brigado pela ajuda :]
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Re: Compilação Condicional

Mensagem por clodoaldomonteiro »

Bom!
Eu não uso o HBMake pois no xDev Studio do Vailton já tem tudo.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Compilação Condicional

Mensagem por sygecom »

Já tentou com -D ? ex:
hbmake arquivo.bc -DX
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
JefTookuni
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 15 Dez 2009 17:58
Localização: Paraná

Re: Compilação Condicional

Mensagem por JefTookuni »

Então o problema ocorre porque no meu arquivo .bc ja tem as configurações e definições da compilação, quando atribuo o -D ele não executa nada de diferente, apenas quando eu mudo o arquivo .bc que obtenho resultado :s
Eu queria encontrar uma forma de passar esse valor sem alterar o arquivo .bc :s
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Compilação Condicional

Mensagem por rochinha »

Amiguinho,

O arquivo .BC contém os parametros necessários para a compilação, neste caso para acrescentar mais um parametro, este deverá estar dentro do arquivo .BC.

Reconfigure o .BC para que já contenha o parâmetro requerido.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
JefTookuni
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 15 Dez 2009 17:58
Localização: Paraná

Re: Compilação Condicional

Mensagem por JefTookuni »

A :/ intão sem lterá-lo, algo amis genérico não conseguirei fazer ? :s
bom tenho dois tipos de parâmetros a passar, qual seria a melhor solução? alterar todas as vezes ou deixar dois arquivos BC cada um com seus parâmetros?
Vlw a ajuda ai gente :]
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Compilação Condicional

Mensagem por rochinha »

Amiguinho,

Não sei como funciona o HBMake mas assim como em um arquivo de lote que posso passar mais parametros ao compilar eu tenho algo assim:

%HBDIR%\BIN\\HARBOUR %1 -m -p %2 %3 %4

Veja que meu comando de lote já tem alguns parametros fixos e recebe mais alguns passados interativamente, portanto se eu quizer acrescentar mais um parametro e o mesmo é fixo então apenas acrescentarei assim:

%HBDIR%\BIN\\HARBOUR %1 -m -p %2 %3 %4 -o

Tenho pra mim que o HBMake é usado apenas para preparar o .BC inicial e este mesmo sera usado várias vezes.

Mas se quiser acrescentar mais um trecho ao .BC sem mexer no principal(se não houver como, o que acho dificil) voce pode usar a técnica de concatenação. Neste caso voce usará o seu .BC original somado ao .BC secundário gerando um .BC destino.

COPY arquivo.BC+arquivo.BC2 arquivo.BC3

Ai voce executa o .BC3 ao invés do .BC original.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Compilação Condicional

Mensagem por asimoes »

Olá,

Faça como eu fiz, você tem ai na sua máquina os fontes do xharbour, incluindo o hbmake, altere o hbmake.prg para sua necessidade fazendo com o seu .bc seja criado com os parâmetros que você precisa.

Eu fiz assim:

Copiei todos os fontes do hbmake pra uma pasta nova: \hbm renome-ei o hbmake.prg para hbm.prg, modifiquei o hbm.prg incluindo alguns parametros
que o hbmake original não faz, como o do seu caso, para gerar o script do jeito que eu precisava. A partir dai, os meus sistemas são compilados corretamente, sem precisar alterar o .bc

Não se esqueça que depois você vai ter que criar um hbm.bc com todos os fontes do hbmake para gerar o hbm.exe

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
JefTookuni
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 15 Dez 2009 17:58
Localização: Paraná

Re: Compilação Condicional

Mensagem por JefTookuni »

Então tenho uma configuração de compilação para exibir erros, no caso um executável de teste, e outra configuração onde não exibe os erros, apenas encerra o programa. Poderia me explicar melhor sua solução asimoes ?
Brigadão ai gente, to vendo uma luz! lo/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Compilação Condicional

Mensagem por asimoes »

JefTookuni escreveu:Então tenho uma configuração de compilação para exibir erros, no caso um executável de teste, e outra configuração onde não exibe os erros, apenas encerra o programa. Poderia me explicar melhor sua solução asimoes ?
Explicando:

x = unidade onde está instalado o seu xharbour.

Hoje você usa o hbmake do xharbour que é gerado na compilação do xharbour e que está na pasta x:\xharbour\bin. Ok.
Os fontes do hbmake estão na pasta x:\xHarbour\utils\hbmake.

Para resolver o seu caso de forma não ter que modificar o seu programa.bc por fora, como segestão você irá criar o seu próprio hbmake com outro nome, por exemplo hbm.exe como explicado no post anterior.

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
JefTookuni
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 15 Dez 2009 17:58
Localização: Paraná

Re: Compilação Condicional

Mensagem por JefTookuni »

Ai galera encontrei uma forma \o/
Pela ajuda que recebi o mínimo a fazer é compartilhar minha solução =]

Eu fiz o seguinte:
eu utilizava um .Bat para a compilação antes de migrar para o xharbour, nesse bat passava as definições e os parâmetros necessários.
Então no meu arquivo BC eu criei uma variável, assim como HB_DIR, eu criei uma variavel pois analisando o BC percebi que o mesmo pegava variáveis de ambiente, pensando dessa forma criei a variável e no meu bat, quando preciso de outra configuração eu defino a variável de ambiente, após a compilação eu cancelo a variável, mais ou menos assim :

Arquivo BC inseri a variável onde são feitas as definições :
HARBOURFLAGS = -Dsistema -Ddefinicao2 -D$(VARIAVEL_DEFINICAO) -b -m -w0

e no meu arquivo bat fiz o seeguinte:
se enviar a variavel de definção para o bat, ele executa o seguinte:
set VARIAVEL_DEFINICAO=configuracao
hbmake ARQUIVO.BC -f
set VARIAVEL_DEFINICAO=

Ai é criada a variavel com o valor que preciso, utilizo ela no BC depois a destruo.
Bom acho que fica como uma opção, pois só mudar a variavel passada para o BAT, sem alterar arquivo algum.
Vlw ai galera pela ajuda, espero que minha solução ajude.
abraços.
Responder