Usar hbmk2

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

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar hbmk2

Mensagem por JoséQuintas »

vilian escreveu:Boa Tarde José,
Vi no fórum Clipper que vc já usa o HBMK2 e estamos querendo usá-lo por aqui. Mas estamos tendo alguma dificuldade para gerar os projetos. Vc poderia nos ajudar com isso ?
1. O Harbour é composto de ferramentas, precisam estar no PATH

Quais os EXEs: harbour.exe, hbmk2.exe, upx.exe (se usar compactação), e compilador C
Muitos esquecem, porque o hbmk2 gerencia tudo sozinho, mas o Harbour só converte pra C, quem compila é o compilador C.
Aqui depende do compilador C, pode ser gcc.exe, bcc32.exe, c.exe, etc.
Tudo precisar estar no PATH, pra funcionar em qualquer lugar
Na dúvida, dá pra usar hbmk2 arquivo.prg -trace, assim dá pra ver qual o nome do(s) EXE(s).

As linhas de compilação podem ser gigantes, mas SEMPRE o nome do EXE é o primeiro de cada linha
A linha pode ter 2.000 caracteres, não importa, o nome do EXE é a primeira palavra da linha.

Tenha certeza de configurar um único Harbour, é normal instalarem vários Harbour na máquina, e aí misturar tudo.

2. Concluída a primeira etapa, é o arquivo de projeto propriamente dito

Basicamente é colocar o nome de todos os arquivos que entram no projeto, pode ser PRG, RC, C, etc.
Lembrando que o arquivo do projeto é xxx.HBP
fonte1.prg
fonte2.c
resource.rc

Geralmente isso basta.

Caso use lib adicional, é adicionar o -lnomedalib.
-L maiúsculo é path
-l minúsculo é nome de lib

Algumas LIBs já tem preparado um arquivo hbc pra simplificar, nesse caso ao invés de indicar tudo da lib, basta o hbc
exemplo: gtwvg.hbc hbhpdf.hbc hbtip.hbc hbct.hbc

E a partir daí é LER a mensagem de erro, caso falte alguma coisa.
O hbmk2 geralmente dá dicas sobre libs/funções conhecidas, caso falte colocar.

Fora isso tem os parâmetros adicionais, ou que usava no Clipper, ou adicionais, ou porque quer diferente do padrão.

-m
-n
-w0 ou -w1 ou -w2 ou -w3
-es0 ou -es3
-compress
-oNomeDoExe
-strip

Opcionalmente, pode adicionar parâmetros ao projeto na linha de compilação, se quiser fazer testes, ou se quiser diferente do configurado no HBP.

hbmk2 projeto.hbp -comp=mingw64

Basicamente é isso.
Primeiro use o básico, depois vai descobrindo as inúmeras opções existentes, que pode ou não precisar.
Tem muita opção, com certeza nunca vai usar todas.
Mais opções, digite: hbmk2 -longhelp

Nota: O Harbour tem um vício. Por precaução, pode ser interessante configurar uma variável extra
Isso é importante, principalmente pra quem tem muitas versões do Harbour na máquina.
SET HB_INSTALL_PREFIX=c:\harbour

nota2: e se for xharbour, é acrescentar -xhb na linha de comando.
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/
ricardo arraes
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 27 Mai 2020 17:37
Localização: Belém-PA

Usar hbmk2

Mensagem por ricardo arraes »

JoséQuintas escreveu:
vilian escreveu:Boa Tarde José,
Vi no fórum Clipper que vc já usa o HBMK2 e estamos querendo usá-lo por aqui. Mas estamos tendo alguma dificuldade para gerar os projetos. Vc poderia nos ajudar com isso ?
1. O Harbour é composto de ferramentas, precisam estar no PATH

Quais os EXEs: harbour.exe, hbmk2.exe, upx.exe (se usar compactação), e compilador C
Muitos esquecem, porque o hbmk2 gerencia tudo sozinho, mas o Harbour só converte pra C, quem compila é o compilador C.
Aqui depende do compilador C, pode ser gcc.exe, bcc32.exe, c.exe, etc.
Tudo precisar estar no PATH, pra funcionar em qualquer lugar
Na dúvida, dá pra usar hbmk2 arquivo.prg -trace, assim dá pra ver qual o nome do(s) EXE(s).

As linhas de compilação podem ser gigantes, mas SEMPRE o nome do EXE é o primeiro de cada linha
A linha pode ter 2.000 caracteres, não importa, o nome do EXE é a primeira palavra da linha.

Tenha certeza de configurar um único Harbour, é normal instalarem vários Harbour na máquina, e aí misturar tudo.

2. Concluída a primeira etapa, é o arquivo de projeto propriamente dito

Basicamente é colocar o nome de todos os arquivos que entram no projeto, pode ser PRG, RC, C, etc.
Lembrando que o arquivo do projeto é xxx.HBP
fonte1.prg
fonte2.c
resource.rc

Geralmente isso basta.

Caso use lib adicional, é adicionar o -lnomedalib.
-L maiúsculo é path
-l minúsculo é nome de lib

Algumas LIBs já tem preparado um arquivo hbc pra simplificar, nesse caso ao invés de indicar tudo da lib, basta o hbc
exemplo: gtwvg.hbc hbhpdf.hbc hbtip.hbc hbct.hbc

E a partir daí é LER a mensagem de erro, caso falte alguma coisa.
O hbmk2 geralmente dá dicas sobre libs/funções conhecidas, caso falte colocar.

Fora isso tem os parâmetros adicionais, ou que usava no Clipper, ou adicionais, ou porque quer diferente do padrão.

-m
-n
-w0 ou -w1 ou -w2 ou -w3
-es0 ou -es3
-compress
-oNomeDoExe
-strip

Opcionalmente, pode adicionar parâmetros ao projeto na linha de compilação, se quiser fazer testes, ou se quiser diferente do configurado no HBP.

hbmk2 projeto.hbp -comp=mingw64

Basicamente é isso.
Primeiro use o básico, depois vai descobrindo as inúmeras opções existentes, que pode ou não precisar.
Tem muita opção, com certeza nunca vai usar todas.
Mais opções, digite: hbmk2 -longhelp

Nota: O Harbour tem um vício. Por precaução, pode ser interessante configurar uma variável extra
Isso é importante, principalmente pra quem tem muitas versões do Harbour na máquina.
SET HB_INSTALL_PREFIX=c:\harbour

nota2: e se for xharbour, é acrescentar -xhb na linha de comando.
entendi, José, obrigado pela resposta! sobre os resources no arquivo RES, está entendido, trabalhei no sentido que você explicou.

Mas no caso das DLL's, como proceder? vi que existem parâmetros para incluí-las, como -depimplibs, mas quando implemento isso, ocorre um erro questionando a "dependency". Gostaria de saber o que seria essa "dependency" e como linkar corretamente DLL's no meu projeto.

Obrigado desde já
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar hbmk2

Mensagem por JoséQuintas »

ricardo arraes escreveu:Mas no caso das DLL's, como proceder? vi que existem parâmetros para incluí-las, como -depimplibs, mas quando implemento isso, ocorre um erro questionando a "dependency". Gostaria de saber o que seria essa "dependency" e como linkar corretamente DLL's no meu projeto.
Não uso isso, então apenas dar uma idéia:

DLLs é um caso a parte.
Pode dar uma olhada nos projetos do Harbour que usam DLL.

É algo como criar automático:

FUNCTION blablabla(....)
RETURN ChamadaDaDll( "DLL", "blablabla", ... )

Muita gente confunde isso.
NÃO é gerada uma LIB pra substituir a DLL, apenas é gerada uma lib intermediária que conversa com a DLL.

Lembro no Harbour/Xharbour em BCC, que isso é feito pelo utilitário TIMPLIB.EXE
O HBMK2 faz isso automático, usando a ferramenta do compilador C que estiver sendo usado.

Nesse caso, precisa da DLL pra gerar a LIB intermediária e/ou da DLL + lib intermediária para o EXE.
Como depende desses dois arquivos, é onde entram opções do hbmk2 fazer a checagem se as dependências existem.
De repente, pode ser que exista um arquivo CH com #defines para essa DLL, acaba sendo mais outra dependência a ser verificada.

Mas a parte de DLL já é algo mais avançado, quem usa deve saber, ou partir do que é usado no Harbour como referência.

As LIBs desse tipo do Harbour tem muitas checagens/opções: lembre-se que elas são preparadas pra atender Windows, Linux, 32 bits, 64 bits, msvc, mingw, etc.
Por isso tem muita checagem, porque cada situação dessas usa configuração diferente.
Provavelmente não vai precisar de tanta variação assim, e vai usar uma configuração mais simplificada pra usar a DLL.

Apenas conheço essa parte teórica, nunca precisei usar na prática.
Acabo preferindo o hb_DynCall(), pra só precisar da DLL se for usada alguma função dela.
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/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Usar hbmk2

Mensagem por cjp »

Em outro post, foi-me recomendado gerar a lib libmysql.lib para libmysql.c. Não estou entendendo como fazer isto.
Não sei se este é o post adequado para isto. Se não for, peço o favor de me indicar qual seria.
Foi-me passado um bat para eu adaptar para uso aqui, que fiz assim:

Código: Selecionar todos

@echo off
@setlocal
@echo Compilando o programa CLANG...
set path=\hb34\bin;\hb34\comp\mingw64\bin;
cd\hb34
HB_WITH_MYSQL=C:\mysql\include
set HB_DBG_PATH=.\
hbmk2 hbmysql.hbp -jobs -rebuild  
pause
Não sei se está correto.

Estou obtendo o erro do anexo. Já testei todas as opções, sem sucesso.

Alguém poderia me ajudar?
Anexos
tela.png
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Usar hbmk2

Mensagem por alxsts »

Olá!

Veja o outro tópico sobre esta dúvida, postado por você: Aos poucos migrando tela caracter para GUI
[]´s
Alexandre Santos (AlxSts)
Responder