Diretiva de compilação
Moderador: Moderadores
Diretiva de compilação
Pessoal,
Passando uma diretiva de compilação -dTESTE tem como ver essa diretiva em uma lib?
Passando uma diretiva de compilação -dTESTE tem como ver essa diretiva em uma lib?
►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)
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)
Diretiva de compilação
Uma definição de pre-processamento "-d" só tem como ser visualizada pelo compilador em momento de pré-processamento... se ela estiver definida o compilador processa, caso contrario, o compilador ignora...
Então, não, não é possivel ver se a definição "TESTE" está compilada e definida para a sua lib utilizando a opção de definição de pre-processamento.
Processos semelhantes são realizados com libs em C/C++, onde é gerada uma lib de debug, teste e release, para cada uma existe um define especifico...
"#if DEBUG"
"#elif TESTE"
"#else"
Então, não, não é possivel ver se a definição "TESTE" está compilada e definida para a sua lib utilizando a opção de definição de pre-processamento.
Processos semelhantes são realizados com libs em C/C++, onde é gerada uma lib de debug, teste e release, para cada uma existe um define especifico...
"#if DEBUG"
"#elif TESTE"
"#else"
-
marcosgambeta
- Usuário Nível 3

- Mensagens: 332
- Registrado em: 16 Jun 2005 22:53
Diretiva de compilação
É possível criar uma função que retorne um valor lógico, de forma que seja possível saber se uma diretiva está definida ou não:asimoes escreveu:Passando uma diretiva de compilação -dTESTE tem como ver essa diretiva em uma lib?
Código: Selecionar todos
PROCEDURE Main ()
? DiretivaTesteDefinida()
RETURN
STATIC FUNCTION DiretivaTesteDefinida ()
#ifdef TESTE
RETURN .T.
#endif
RETURN .F.
Código: Selecionar todos
hbmk2 teste -DTESTE <ENTER>
teste <ENTER>
hbmk2 teste <ENTER>
teste <ENTER>
Atenciosamente,
Marcos Antonio Gambeta
Marcos Antonio Gambeta
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Diretiva de compilação
Dependendo do que está querendo, poderia criar algo pra isso.
Exemplo:
A partir daí, pode setar pelo programa principal: LibAlgumNomeTeste( .T. )
Incluindo colocar no programa principal uma opção de ativar/desativar teste.
Exemplo:
Código: Selecionar todos
// Na LIB
IF LibAlgumNomeTeste()
...
ENDIF
FUNCTION LibAlgumNomeTeste( xNewValue )
STATIC xValue := .F.
IF xNewValue != NIL
xValue := xNewValue
ENDIF
RETURN xNewValue
Incluindo colocar no programa principal uma opção de ativar/desativar teste.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Diretiva de compilação
Pessoal,
Eu acabei criando um recurso para essa necessidade:
A equipe responsável pela compilação em produção passa a diretiva -dPRODUCAO
As equipes de desenvolvimento não podem passar a diretiva acima, pois existe outros controles de verificação de ambiente de rede
então se alguém copiar o executável de produção da rede para o local (pc) não vai conseguir executá-lo.
O include ambientecomp.ch é obrigatório informar em todas as aplicações.
hbmk2 aplicacao -dPRODUCAO -rebuild
hbmk2 aplicacao -dDESENVOL -rebuild
hbmk2 aplicacao -rebuild
Aplicação
ambientecomp.ch
Lib
Eu acabei criando um recurso para essa necessidade:
A equipe responsável pela compilação em produção passa a diretiva -dPRODUCAO
As equipes de desenvolvimento não podem passar a diretiva acima, pois existe outros controles de verificação de ambiente de rede
então se alguém copiar o executável de produção da rede para o local (pc) não vai conseguir executá-lo.
O include ambientecomp.ch é obrigatório informar em todas as aplicações.
hbmk2 aplicacao -dPRODUCAO -rebuild
hbmk2 aplicacao -dDESENVOL -rebuild
hbmk2 aplicacao -rebuild
Aplicação
Código: Selecionar todos
#include "ambientecomp.ch"
Function Main
VERCOMP()
Return Nil
Código: Selecionar todos
FUNCTION AMBIENTECOMP(cVarPar)
#ifdef PRODUCAO
cVarPar:="Versão Produção"
#else
cVarPar:="Versão Desenvolvimento"
#endif
RETURN Nil
Código: Selecionar todos
FUNCTION VERCOMP
LOCAL cVar:=""
Eval({||AmbienteComp(@cVar)}) //ambientecomp.ch
If cVar = "Versão Produção"
MsgInfo("Versão Produção")
Else
MsgInfo("Versão Desenvolvimento")
Endif
RETURN Nil
►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)
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)
-
Euclides
- Usuário Nível 3

- Mensagens: 154
- Registrado em: 12 Mai 2007 14:07
- Localização: São Paulo, Capital
Diretiva de compilação
Olá pessoal,
desde ois tempos de Clipper eu fazia assim:
... e para compilar (no Harbour):
hbmk2 teste -dambiente=aTst // para teste
hbmk2 teste -dambiente=aPrd // para produção
É só isso:
T+ Euclides
desde ois tempos de Clipper eu fazia assim:
Código: Selecionar todos
#define aTst "Teste"
#define aPrd "Producao"
Function Main()
? ambiente
return nilhbmk2 teste -dambiente=aTst // para teste
hbmk2 teste -dambiente=aPrd // para produção
É só isso:
T+ Euclides


