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: 20420
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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


