Página 1 de 1

Usar hbmk2

Enviado: 27 Mai 2020 19:27
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.

Usar hbmk2

Enviado: 27 Mai 2020 21:08
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á

Usar hbmk2

Enviado: 28 Mai 2020 07:56
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.

Usar hbmk2

Enviado: 30 Mai 2020 00:10
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?

Usar hbmk2

Enviado: 30 Mai 2020 00:35
por alxsts
Olá!

Veja o outro tópico sobre esta dúvida, postado por você: Aos poucos migrando tela caracter para GUI