Clipper On Line • Ver Tópico - Como compilar com Harbour

Como compilar com Harbour

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Como compilar com Harbour

Mensagempor JoséQuintas » 24 Out 2018 10:47

Parece óbvio.... mas dá pra melhorar.
Não existe uma regra fixa, porque depende de particularidades de cada um.

hbp - arquivo de projeto
hbm - arquivo de pasta
hbc - arquivo geralmente de uma LIB específica

Num projeto básico, PRGs usando o padrão, no hbp só precisa a lista dos prgs, e pode ser necessário o nome do EXE

prog1.prg
prog2.prg
-otest

Se esse projeto usa harupdf, já existe um hbhpdf.hbc que acrescenta tudo que precisa. (libs,includes,etc)

prog1.prg
prog2.prg
-otest
hbhpdf.hbc

se usa gtwvg, acrescenta também gtwvg.hbc
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 24 Out 2018 10:50

\Harbour\bin\hbmk.hbc

Esse é um arquivo especial.
Pode deixar fixo no Harbour aonde ele procura tudo.
Isso seria o mesmo que acrescentar esse conteúdo em tudo que é projeto.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 24 Out 2018 11:00

\Harbour\addons

Essa é uma pasta especial, é uma pasta pra pesquisar se o que falta está aí dentro, ou nas subpastas daí de dentro.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 24 Out 2018 11:07

O meu \Harbour\bin\hbmk.hbc.
vou formatar como quote, pra ficar visível por completo, e porque não tem sentido copiar, porque é meu uso pessoal.

mt=yes
gui=yes
strip=yes
compr=yes
libpaths=d:/cdrom/fontes/integra/sefazclass
libpaths=d:/cdrom/fontes/integra/josequintas
libpaths=d:/cdrom/fontes/integra/josequintas/bostaurus
libpaths=d:/github/allgui/hmg3
libpaths=d:/github/allgui/hmge
libpaths=d:/github/allgui/hwgui
libpaths=d:/github/allgui/oohg


Isso indica que tudo que eu compilar vai ser multithread (mt=yes), GUI (gui=yes), retirar informações de debug de C (strip=yes), compactar (compr=yes)

libpath indica que se faltar alguma coisa, pra procurar nessas pastas indicadas
Então.. já fica disponível pra uso sefazclass, josequintas, bostaurus, hmg3, hmg extended, hwgui e oohg
Disponível pra uso significa "que está no path", não vão ser usadas a menos que estejam indicadas no projeto.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 24 Out 2018 11:18

na pasta \cdrom\fontes\integra\sefazclass é a mesma sefazclass que todos usam.
Lá tem o hbc:

Description=any
libs=sefazclass
{!xhb}libs=hbhpdf.hbc hbzebra.hbc hbwin.hbc hbct.hbc
libpaths=${hb_addons}/sefazclass/lib/${hb_plat}/${hb_comp}
incpaths=include
{xhb}incpaths=d:\xharbour\contrib\hbhpdf
{xhb}incpaths=d:\xharbour\contrib\hbzebra


Então quando vou compilar, se quiser acrescentar a sefazclass, indico sefazclass.hbc, é o arquivo acima.
hbmk2 test.prg sefazclass.hbc

Isso vai compilar usando tudo que está no meu hbmk.hbc.
Além disso, esse arquivo indica que:
- vai usar a lib sefazclass (lib=sefazclass)
- que as libs da sefazclass estão na pasta addons do Harbour (libpaths=${h_addons}...
- que os includes da sefazclass estão na pasta \include de onde está o hbc
- que precisa adicionar libs hbhpdf.hbc hbzebra.hbc hbwin.hbc hbct.hbc, mas não se for xharbour {!xhb}libs=
- e se for xharbour, acrescenta alguns includes {xhb}incpaths=

Ou seja, tudo que precisa adicionar pra sefazclass, está nesse sefazclass.hbc
E vai buscar automático esse arquivo, porque está indicado em hbmk.hbc da pasta \Harbour\bin

Destaque para: {xhb} e {!xhb}
é isso mesmo que leram, se for Harbour ou XHarbour, hbmk2 funciona nos dois (e outros) !!!!
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 24 Out 2018 11:27

na pasta \cdrom\fontes\integra\josequintas, o mesmo conteúdo que está no GitHub.
Como eu disse, boa parte do meu aplicativo está no GitHub, mostrando funções/libs, e até módulos
Tem lá o josequintas.hbc

Description=any
libs=josequintas sefazclass.hbc
libs=sefazclass.hbc hbhpdf.hbc hbwin.hbc hbzebra.hbc gtwvg.hbc hbct.hbc hbtip.hbc hbnetio.hbc hbziparc.hbc hbmisc.hbc
libpaths=${hb_addons}/josequintas/lib/${hb_plat}/${hb_comp}
incpaths=include
incpaths=..\..\build


Segue o estilo do anterior: libs a serem adicionadas, includes, paths, e a lib josequintas fica no \harbour\add-ons

Pra compilar usando josequintas, basta adicionar josequintas.hbc
hbmk2 test josequintas.hbc
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 24 Out 2018 11:34

hmg3, hmg extended, hwgui e oohg.
Para essas LIBs eu criei um arquivo HBC, que indica tudo.

Então, se eu quiser compilar um teste ou exemplo da HMG Extended, por exemplo, basta indicar:
hbmk2 test hmge.hbc

Mesmo esquema de todo restante.
O hbmk.hbc indica aonde encontrar hmge.hbc, e o hmge.hbc indica aonde está tudo
o hbc está em \GitHub\allgui\hmge
E toda hmge está dentro dessa pasta hmge, exceto as libs que ficam em \Harbour\addons

incpaths=include
libpaths=${hb_install_prefix}/addons/hmge/lib/win/${hb_comp}
libs=hmge_core hmge_propgrid hmge_propsheet
libs=hmge_propgrid hmge_propsheet
libs=hmge_adordd
libs=hmge_bostaurus
libs=hmge_hbprinter
libs=hmge_miniprint
libs=hmge_shell32
libs=hmge_tmsagent
libs=hbct.hbc hbziparc.hbc
libs=msvfw32 vfw32
gui=yes


Mesmo princípio dos demais, apenas renomeei todas as libs com prefixo hmge_ pra não misturar com outras.
Aí indica aonde buscar os .ch, as libs, e quais são as libs necessárias
e as libs em \Harbour\addons - alterei a criação também pra ficar igual
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 24 Out 2018 11:39

A LIB hmg extended poderia ser totalmente colocada em \Harbour\addons, com fonte e tudo, ficaria até mais automático.
Mas preferi deixar separado, e apenas acrescento no hbmk.hbc de \harbour\bin a indicação da pasta.
Se alterassem diretamente na hmg extended, ficaria mais fácil pra todos os usuários....
E viria tudo pronto, não importa se harbour, xharbour, bcc, msvc, mingw, 32 bits, 64 bits, etc.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor alxsts » 24 Out 2018 12:09

Olá!

Muito bom!

Só não ficou claro, pelo menos pra mim, os arquivos .HBM. Poderia exemplificar? Grato.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 24 Out 2018 12:25

Os arquivos HBM ficam em pastas.
Eles indicam que se for compilar alguma coisa daquela pasta, é pra usar a configuração do HBM.

Por exemplo, se um projeto vai usar hmg extended, poderia criar um arquivo HBM contendo a indicação da HMG Extended dentro da pasta do projeto.

Vantagem dos HBCs:
Voce pode ter vários projetos que dependem da HWGUI, ou HMGE, ou GTWVG.
No projeto voce indica que precisa delas HWGUI.HBC, HMGE.HBC, GTWVG.HBC
E não importa aonde estão as LIBs, fica tudo independente.

Se tiver duas versões de HWGUI, por exemplo:

- pode trocar de versão de todos os projetos, apenas alterando o \harbour\bin\hbmk.hbc
- pode trocar de um projeto específico, colocando na pasta o hbmk.hbm
- pode trocar indicando direto no HBP

Ou... se não usar HBC, ficar sempre trocando cada HBP de cada projeto. (ou HBM)

O HBM pode ser interessante se misturar LIBs diferentes.
Se não me engano, GTWVG e HWGUI/HMGE não se dão bem, porque definem tem conflito de #defines.
A opção HBM seria boa, pra colocar fontes HWGUI em uma pasta, GTWVG em outra pasta, e compilar cada pasta de modo diferente, pra depois linqueditar tudo junto.

É tudo pra facilitar configuração.
Pode ser mais fácil copiar um HBM de uma pasta pra outra, do que ficar alterando muitos HBP.
Ou indicar um HBC diferente
por exemplo, hwgui217.hbc e hwgui220.hbc, que direcionam a versão diferente de hwgui.
Ou um hbm dentro de cada projeto enquanto está fazendo conversão.

Vai de cada um, ou de cada necessidade.
É entender como funciona, e decidir se vai ser vantagem um ou outro, no projeto que estiver mexendo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor lugab » 24 Out 2018 12:39

Obrigado, mestre Quintas

Vc, mais que ninguém, tem demonstrando que tem a exata noção de que a total falta de documentação vem confundindo
a cabeça da gente e está sempre bolando facilidades e postando pra nós...

Receba o "Oscar das Utilidades" de nossas mãos
-:]
lugab
lugab
Colaborador

Colaborador
 
Mensagens: 843
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 38 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 24 Out 2018 14:18

Só estou repassando o que vou aprendendo.

Por exemplo, neste tópico o Hazael me mostrou o ${hb_addons} pra acessar a pasta harbour/addons sem depender de HB_INSTALL_PREFIX

http://www.pctoledo.com.br/forum/viewtopic.php?f=43&t=18515&p=125325&hilit=hb_addons#p125325

O tempo todo, todo mundo está aprendendo e ensinando.

É como eu disse antes:
Não existe regra geral, cada um vai escolhendo o que acha melhor, ou algo que viu que pode facilitar seu trabalho.
Quando isso é compartilhado... todo mundo ganha

A sefazclass por exemplo, sempre tem alguém que acaba colaborando.
Até o Hazael, como eu disse acima, ajudou com o ${hb_addons}, e com um XML que não estava sendo lido pela classe por estar um pouco diferente do normal.
Pode ser que tenha acontecido em algum cliente meu ou que aconteceria no futuro e não vai acontecer mais, ou com algum usuário da classe.
Se eu tivesse guardado a classe só pra mim, talvez não tivesse descoberto esse problema.
Todo mundo ganha.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 26 Out 2018 12:58

Eu uso aqui também meu pré-compilador.
Nada demais, só adequando ao meu uso, chamado antes do HBMK2

/*
BUILD - PRE-COMPILACAO
José Quintas
*/

REQUEST errorsys

#include "directry.ch"

FUNCTION Main( ... )

   LOCAL cDateTime, cTxt, nBuildNum, cFileName, cLastPath, aParams

   SetMode( 38, 132 )

   CheckVar( "HB_BUILD_DYN", "no" )
   CheckVar( "HB_BUILD_CONTRIB_DYN", "no" )
   CheckVar( "HB_BUILD_STRIP", "all" )
   CheckVar( "HB_COMPILER", "mingw" )
   CheckVar( "HB_INSTALL_PREFIX", "\bin\hbmk2.exe" )
   CheckVar( "PATH", "hbmk2.exe" )
   CheckVar( "PATH", "gcc.exe" )

   aParams    := hb_AParams()
   cFileName  := hb_FNameDir( hb_ProgName() ) + hb_FNameName( hb_ProgName() )
   cDateTime  := Dtos( Date() ) + Substr( Time(), 1, 2 ) + Substr( Time(), 4, 2 )

   cTxt       := MemoRead( cFileName + ".xml" )

   nBuildNum  := Val( XmlNode( cTxt, "BuildNum" ) ) + 1
   cLastPath  := XmlNode( cTxt, "LastPath" )

   IF ! Upper( cLastPath ) == Upper( hb_cwd() )
      DeleteContent( "c:\temp", .F. )
      DeleteContent( "c:\users\joseq\appdata\local\temp", .F. )
   ENDIF

   cTxt := "#define JOSEQUINTAS_VERSAO    " + ["]  + Transform( cDateTime, "@R 9999.99.99.9999" ) + ["] + hb_Eol()
   cTxt += "#define JOSEQUINTAS_VERSAO_RC  " + Transform( cDateTime, "@R 9999,99,99,9999" ) + hb_Eol()
   hb_MemoWrit( cFileName + ".ch", cTxt )
   IF File( "build.ch" ) // BHP ou projeto extra
      hb_MemoWrit( "build.ch", cTxt )
   ENDIF

   cTxt := XmlTag( "BuildNum", Ltrim( Str( nBuildNum ) ) ) + hb_Eol()
   cTxt += XmlTag( "LastPath", hb_cwd() ) + hb_Eol()
   cTxt += XmlTag( "BuildDate", Dtos( Date() ) ) + hb_Eol()
   cTxt += XmlTag( "BuildTime", Time() ) + hb_Eol()

   hb_MemoWrit( cFileName + ".xml", cTxt )
   Compile( aParams )

   RETURN NIL

STATIC FUNCTION DeleteContent( cFolder, lDeleteFolder )

   LOCAL oFiles, oFile, lDelete

   hb_Default( lDeleteFolder, .F. )

   ? "Delete " + cFolder
   oFiles := Directory( "c:\temp\*.*" )
   FOR EACH oFile IN oFiles
      IF oFile[ F_ATTR ] == "D"
         IF oFile[ F_NAME ] != "." .AND. oFile[ F_NAME ] != ".."
            DeleteContent( cFolder + "\" + oFile[ F_NAME ], .T. )
         ENDIF
      ELSE
         lDelete := .T.
         DO CASE
         CASE hb_FNameExt( oFile[ F_NAME ] ) == ".c"
         CASE hb_FNameExt( oFile[ F_NAME ] ) == ".o"
         CASE oFile[ F_DATE ] != Date()
         CASE Left( oFile[ F_TIME ], 4 ) != Left( Time(), 4 )
         OTHERWISE
            lDelete := .F.
         ENDCASE
         IF lDelete
            ? "Deleting " + cFolder + "\" + oFile[ F_NAME ]
            fErase( cFolder + "\" + oFile[ F_NAME ] )
         ENDIF
      ENDIF
   NEXT
   IF lDeleteFolder
      DirRemove( cFolder )
   ENDIF

   RETURN NIL

FUNCTION HB_GT_SYS()

   REQUEST HB_GT_WVG_DEFAULT

   RETURN NIL

STATIC FUNCTION Compile( aParams )

   LOCAL oElement, cPath, cCmd := ""

   cPath := Upper( hb_cwd() )

   DO CASE
   CASE "\HMGE\"  $ cPath ; AAdd( aParams, "hmge.hbc" )
   CASE "\HMG3\"  $ cPath ; AAdd( aParams, "hmg3.hbc" )
   CASE "\OOHG"   $ cPath ; AAdd( aParams, "oohg.hbc" )
   CASE "\HWGUI\" $ cPath ; AAdd( aParams, "hwgui.hbc" )
   ENDCASE
   IF Len( aParams ) != 0 .AND. aParams[ 1 ] == "/cmd"
      hb_ADel( aParams, 1, .T. )
   ELSEIF Len( Directory( "*.hbp" ) ) != 0
      AAdd( aParams, "*.hbp" )
   ELSEIF Len( Directory( "*.prg" ) ) != 0
      Aadd( aParams, "*.prg" )
      AAdd( aParams, "*.rc" )
   ELSE
      ? hb_cwd()
      Inkey(0)
   ENDIF
   AAdd( aParams, "-m" )
   AAdd( aParams, "-n" )
   IF ! "\ALLGUI\" $ cPath
      IF aScan( aParams, { | e | Left( e, 2 ) == "-w" } ) == 0
         AAdd( aParams, "-w3" )
      ENDIF
      IF aScan( aParams, { | e | Left( e, 3 ) == "-es" } ) == 0
         AAdd( aParams, "-es2" )
      ENDIF
   ENDIF
   AAdd( aParams, "-workdir=c:\temp" )
   AAdd( aParams, "-compr" )
   AAdd( aParams, "-strip" )
   AAdd( aParams, "-mt" )
   AAdd( aParams, "-quiet" )
   //AAdd( aParams, "-q0" )
   AAdd( aParams, "-ge1" )
   AAdd( aParams, "-I" + hb_FNameDir( hb_ProgName() ) )
   cCmd += "HBMK2 "
   FOR EACH oElement IN aParams
      cCmd += oElement + " "
   NEXT
   cCmd := ;
      hb_ProgName() + " %*" + hb_Eol() + ;
      cCmd + hb_Eol()
   DO CASE
   CASE "\SJPA\"     $ cPath .AND. File( "..\sjpa.exe" );  cCmd += "assina ..\sjpa.exe" + hb_Eol()
   CASE "\HAROLDO\"  $ cPath .AND. File( "hl.exe" );       cCmd += "assina hl.exe" + hb_Eol()
   CASE "\LABOROIL\" $ cPath .AND. File( "nfe.exe" );      cCmd += "assina nfe.exe" + hb_Eol()
   CASE "\BUILD\"    $ cPath .AND. File( "build.exe" );    cCmd += "assina build.exe" + hb_Eol()
   CASE "\INTEGRA\"  $ cPath .AND. File( "jpa.exe" );      cCmd += "assina jpa.exe" + hb_Eol()
   ENDCASE
   hb_MemoWrit( "d:\tools\util\c.bat", cCmd )

   RETURN NIL

STATIC FUNCTION CheckVar( cVar, cDefault )

   LOCAL lOk := .F., aList, oElement

   IF Empty( GetEnv( cVar ) )
      ? "not found set " + cVar
   ENDIF
   IF cVar == "HB_INSTALL_PREFIX"
      IF ! File( GetEnv( "HB_INSTALL_PREFIX" ) + cDefault )
         ? "HB_INSTALL_PREFIX não indica pasta com " + cDefault
      ENDIF
   ENDIF
   IF cVar == "PATH"
      aList := hb_RegExSplit( ";", GetEnv( "PATH" ) )
      FOR EACH oElement IN aList
         IF File( oElement + cDefault )
            lOk := .T.
         ENDIF
      NEXT
      IF ! lOk
         ? "Não encontrado no PATH " + cDefault
      ENDIF
   ENDIF

   RETURN NIL


Vamos lá... tenho o C.BAT

d:\cdrom\FONTES\build\build.exe %*
nada
nada


só a primeira linha é fixa, as demais são alteradas depois da chamada do build.exe
Ou seja, vai ser tudo executado diretamente sem nada na memória a não ser o bat.

- Checa algumas variáveis de ambiente. Isso é bom pra quando usar máquina nova ou formatada, pra lembrar do que precisa (ou do que usava).
- Ele atualiza build.ch que vai incluir no projeto a versão do meu EXE
- Caso o projeto tenha um build.ch, copio pra pasta (isso quando é fonte pra terceiros, pra não faltar esse arquivo)
- Desvio todo lixo resultado do HBMK2 para c:\temp, e não pra .HBMK que é o default
- Limpo a pasta c:\temp, apagando arquivos "antigos". Com isso, mesmo que um projeto seja incremental, pra compilar só o que foi alterado, de tempos em tempos apago os arquivos
- Também limpo quando troca de projeto, pra não misturar arquivos com mesmo nome, isto é importante
- Pra compilar HMGE, HMG3, OOHG, HWGUI, não pode ser o mesmo default que uso, então identifico se na pasta atual tem alguma delas (\HMGE\ por exemplo)
- Acrescento os defaults de compilação
- Se for um dos projetos que precisa assinatura digital, acrescento pra assinar
- Por fim, gravo os comandos no C.BAT

Com isso, o BAT chama o build na primeira linha, e executa toda saída do build nas linhas seguintes.
Basicamente é uma chamada do HBMK2, e se precisar, a chamada pra assinatura digital.

Vantagem:
Se tudo que preciso está aí, se trocar de máquina, ele mesmo já me lembra.

Já não aconteceu com alguém de não lembrar tudo que precisava?
Que será mais que precisa configurar na máquina? ????
Antes compilava e agora não... o que será que esqueci ???
Ué... se criar um programa que confere, é só chamar esse programa, e ele vai te lembrar.

É como eu digo sempre: você tem que facilitar seu trabalho
É aproveitar enquanto o cérebro está funcionando bem, pra te ajudar quando o cérebro funcionar mal.
E o mesmo com fontes. Fontes fáceis, trabalho fácil.

Pode servir pra quando ficar velho, mas serve pra quando está novo, pra sobrar tempo.

Aritmética básica: Com o que ganhamos dinheiro?
NOSSO TEMPO
Então... precisamos de ferramentas que economizem nosso tempo.
Aonde encontrar essas ferramentas?
Ué... somos programadores... é só fazer.

A simples conferência da configuração da máquina já faz economizar tempo.
Às vezes porque é demorado configurar, ou às vezes porque demora tanto pra precisar disso que não lembramos mais.... rs

Compilar é a base de todo nosso trabalho.
Está aí um bom item pra começar a facilitar !!

Com tudo isso, aqui pra compilar um projeto digito:

c <ENTER>

E se sai do normal, parâmetros adicionais:

c sefazclass.hbc <enter>
c hwgui.hbc <enter>
c hmge.hbc <enter>
c -w0 -es0 <enter> (desliga meu default -w3 -es2)

Exemplo prático, estava testando aqui:

PROCEDURE Main

   LOCAL cTime, nMinutos, nCont
   cTime := Left( Time(), 5 )
   nMinutos := Val( Substr( cTime, 1, 2 ) ) * 60 + Val( Substr( cTime, 4, 2 ) )
   FOR nCont = 1 TO 10
      ? MtoH( nMinutos )
      nMinutos += 10
   NEXT
   Inkey(0)

FUNCTION AppVersaoExe(); RETURN ""


c<ENTER>

teste.png


Faltou mtoh, e agora, aonde está isso?

hbmk2 -find mtoh

teste2.png


Legal, só acrescentar josequintas.hbc

c josequintas.hbc <enter>

teste3.png


Pra curiosidade o resultado final, mostrar horários somando de 10 em 10 minutos.

test4.png
test4.png (7.21 KiB) Visualizado 3925 vezes


Comentário final:

nada demais, só um programa que acrescenta o que eu teria que digitar.
build.exe - facilitou compilar

hbx de josequintas - facilitou encontrar a função que faltava usando hbmk2 -find
hbp/hbc de josequintas - facilitou gerar o hbx e usar a lib
hbmk2 -find - facilitou encontrar a função que faltava, e até mostrou o que acrescentar

Pequenas ajudas, que se tornam grandes ajudas, e fazem economizar tempo, que é nosso ganha pão.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 26 Out 2018 13:06

Só pra completar:

build.png


Esse é o c.bat depois de chamar o build.exe
Isso foi o que ele colocou no bat pra compilar esse teste.
Acrescentou o build.ch que uso pra indicar versão, e meus parâmetros default.
Como encontrou um hbp na pasta, usou ele, e não o prg diretamente.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como compilar com Harbour

Mensagempor JoséQuintas » 26 Out 2018 13:10

Ia esquecendo....

-q
-quiet

Isso faz diferença na compilação de projetos.
Mostra só se der erro, e não a compilação a cada 100 linhas.

compare com isto: (não vou formatar pra ficar mais fácil de ver)

FOR nCont = 1 TO 1000
? nCont
NEXT

ou

FOR nCont = 1 TO 1000
NEXT

O segundo é extremamente mais rápido, porque não fica mostrando na tela.
O mesmo com compilação, se não ficar mostrando o andamento.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Próximo



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 17 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro