Página 1 de 1
Diretiva de compilação
Enviado: 07 Ago 2015 17:42
por asimoes
Pessoal,
Passando uma diretiva de compilação -dTESTE tem como ver essa diretiva em uma lib?
Diretiva de compilação
Enviado: 09 Ago 2015 11:17
por bencz
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"
Diretiva de compilação
Enviado: 09 Ago 2015 16:48
por marcosgambeta
asimoes escreveu:Passando uma diretiva de compilação -dTESTE tem como ver essa diretiva em uma lib?
É 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:
Código: Selecionar todos
PROCEDURE Main ()
? DiretivaTesteDefinida()
RETURN
STATIC FUNCTION DiretivaTesteDefinida ()
#ifdef TESTE
RETURN .T.
#endif
RETURN .F.
Compile das duas formas abaixo:
Código: Selecionar todos
hbmk2 teste -DTESTE <ENTER>
teste <ENTER>
hbmk2 teste <ENTER>
teste <ENTER>
Não se se era exatamente isto que você queria, mas é assim que costumo fazer quando preciso.
Diretiva de compilação
Enviado: 09 Ago 2015 20:46
por JoséQuintas
Dependendo do que está querendo, poderia criar algo pra isso.
Exemplo:
Código: Selecionar todos
// Na LIB
IF LibAlgumNomeTeste()
...
ENDIF
FUNCTION LibAlgumNomeTeste( xNewValue )
STATIC xValue := .F.
IF xNewValue != NIL
xValue := xNewValue
ENDIF
RETURN xNewValue
A partir daí, pode setar pelo programa principal: LibAlgumNomeTeste( .T. )
Incluindo colocar no programa principal uma opção de ativar/desativar teste.
Diretiva de compilação
Enviado: 10 Ago 2015 07:42
por asimoes
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
Código: Selecionar todos
#include "ambientecomp.ch"
Function Main
VERCOMP()
Return Nil
ambientecomp.ch
Código: Selecionar todos
FUNCTION AMBIENTECOMP(cVarPar)
#ifdef PRODUCAO
cVarPar:="Versão Produção"
#else
cVarPar:="Versão Desenvolvimento"
#endif
RETURN Nil
Lib
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
Diretiva de compilação
Enviado: 11 Ago 2015 09:09
por Euclides
Olá pessoal,
desde ois tempos de Clipper eu fazia assim:
Código: Selecionar todos
#define aTst "Teste"
#define aPrd "Producao"
Function Main()
? ambiente
return nil
... e para compilar (no Harbour):
hbmk2 teste -dambiente=aTst // para teste
hbmk2 teste -dambiente=aPrd // para produção
É só isso:
T+ Euclides