Página 1 de 1

Compilação fácil - atualização 2025/07

Enviado: 25 Jul 2025 17:22
por JoséQuintas
Então....
Compilar é fácil.

Vamos retornar aos primórdios do DOS, primeira versão após surgirem os discos rígidos.....

Código: Selecionar todos

SET PATH=C:\DOS
Ao mesmo tempo, mostrar o atual

Código: Selecionar todos

SET PATH=C:\WINDOWS\SYSTEM32
Do que isso se trata ?
Você digita um comando no prompt, e ele é executado.
DIR
CLS
REN a b
MOVE a b

FORMAT A:
comando não existe

Pra que serve o PATH ?
Você digita um comando, se não faz parte do sistema operacional ele procura no disco.
Se não está na pasta atual, vai procurar no PATH que for indicado.

Alguma dúvida nisso ?

E compilar no Clipper ? E pra compilar no Harbour ? E pra compilar no XHarbour ?

Nada mudou.
Digitou o comando, se não existir, vai procurar no PATH, um ou mais PATHs.

Na verdade mudou sim: Harbour NÃO É COMPILADOR.
Harbour apenas transforma pra fonte C.
Quem faz a compilação mesmo é o COMPILADOR C.
Pode ser BLINKER (BCC), MINGW, Microsoft Visual C (MSVC) ou outro.

Então no PATH precisa colocar o path do harbour e o path do compilador C.
Se existirem utilitários, como as IDEs, é colocar no PATH também.

Isso é básico.
Mais que isso: isso mostra que o PATH é a parte mais importante de tudo, indica aonde encontrar os programas.

SET PATH=C:\WINDOWS\SYSTEM32; C:\HARBOUR\BIN; C:\HARBOUR\COMP\MINGW32\BIN

Coloque também editor de textos que usar, e as ferramentas que usar.

Muitos esperam a IDE fazer tudo sozinha, dizem que pela IDE mais fácil.
Mas ela apenas define o PATH.

Fim da parte 1: PATH para programas

Compilação fácil - atualização 2025/07

Enviado: 25 Jul 2025 17:52
por JoséQuintas
O HBMK2 também tem esse recurso, pouco usado, de definir PATHs.
É só definir em um HBMK.HBC junto com o HBMK2.EXE
HBMK2.EXE costuma ficar junto com o harbour (pode ser xharbour também), em harbour\bin\hbmk.hbc

Pode definir PATH pra LIBs, includes, resources, e tudo mais, numa linha ou em várias linhas, tanto faz
Vamos ao básico: definir aonde as LIBs estão:

HARBOUR\BIN\HBMK.HBC

libpaths=c:\github\hmge
libpaths=c:\github\hwgui
libpaths=c:\github\fivewin
libpaths=c:\github\hmg3
libpaths=c:\github\oohg
libpaths=c:\sefazclass

Similar ao anterior: não encontrou na pasta atual, vai procurar em alguma dessas pastas.
Detalhe: se a LIB estiver em harbour\addons, não precisa disso acima.

Por último, não menos importante, podemos ter um HBC pra cada LIB, também pra informar PATHs e algo mais.
Infelizmente, nem toda lib tem isso pronto.
Mas os HBC das LIBs podem indicar tudo o que elas precisam, e aonde as coisas estão - PATH
Não precisa ser o PATH completo, pode ser relativo à posição do HBC, esta é a parte fundamental pra ser "portátil", PATH relativo.

O que é PATH relativo ? é um PATH levando em consideração o PATH atual.

HWGUI.HBC
libpaths=lib
incpaths=include

O que isso significa ?
se o arquivo hwgui.hbc estiver em c:\github\hwgui, o path lib significa c:\github\hwgui\lib
mesma coisa pra include
Se mover TODA HWGUI pra outra pasta, é só alterar o HBMK.HBC pra indicar a nova pasta.
Não precisa alterar HWGUI.HBC e não precisa alterar projeto nenhum.
Tudo vai sempre funcionar, esteja aonde estiver.

As LIBs às vezes inventam configuração extra:
SET HMG_HARBOUR_ROOT=xxxx
SET HMG_LIBS=xxxx
SET HMG_INCLUDE=xxxx
Não precisa nada disso se usar HBC.

Até aqui resolvemos o PATH

Convém lembrar: além das LIBs padrão, do harbour e de determinada LIB, temos os adicionais que podemos usar.
Aí... cada usuário tem que saber o que está usando.
Isso não é igual pra cada usuário.

Aqui entram os erros comuns que acontecem:

Não achou lib...... deve ser porque não tem path pra lib, ou porque o nome tá errado, só pode ser uma das duas coisas

Não achou função... deve ser porque o nome tá errado, ou porque não foi adicionada a lib que contém aquela função.

A maioria dos problemas de compilação/linquedição é isso.
Ou é PATH ou é nome, ou nome de lib errado, ou nome de função errado.

Qual a dúvida nisso ?
Checar sempre PATH e NOME.

Os HBCs não fazem milagre, não adivinham nada, é verificar PATH e NOME
Do que foi colocado, e do que pode estar faltando.
Se conferiu tudo, colocou tudo que sabia, então é algum nome que ainda não sabe, provavelmente tem a ver com "a coisa nova" que acrescentou.

Resumo:
descubra o que precisa pra compilar.
Crie harbour/bin/hbmk.hbc
Crie pra lib um lib.hbc, um nome exclusivo pra ela. HMGE.HBC, HWGUI.HBC, OOHG.HBC, FIVEWIN.HBC
Vai colocando PATHs nesses arquivos, que sobra menos pra resolver no projeto, sobram somente arquivos particulares que só aquele projeto usa.
fontes do projeto, e libs usadas (e path também, se não for nenhum já definido pelos HBCs)

Isso é tudo.

Compilação fácil - atualização 2025/07

Enviado: 27 Jul 2025 13:11
por JoséQuintas
Também tem aquilo:
Determinada LIB só funcionar com uma versão de harbour/compilador C.
Nessa situação, acaba existindo mais de um harbour, e mais de um compilador C.

Mas é a mesma coisa.
O que estiver no PATH é o que vai ser usado.

Voltando no que já disse antes:

"A linquedição tá dizendo que não encontra algumas coisas"
Se não encontra, diz pra ela aonde encontrar.

"A linquedição tá pegando coisa errada"
Se pegando coisa errada, é porque indicou coisa errada pra ela pegar

Nenhum mistério nisto.

"Tá dando erro de sintaxe inválida na compilação"
Este aqui pode já não ser tão fácil.

Tem os comandos normais do harbour, então seria sintaxe errada mesmo.

Mas os arquivos CH podem criar sintaxes diferentes.
HWGUI, minigui, FIVEWIN, etc. tem arquivo CH pra criar comandos diferentes.
O erro pode ser por falta de colocar o arquivo CH
exemplo:

Código: Selecionar todos

#include "hwgui.ch"
Ou erro em run-time, ou na compilação -w3 -es2 de variável

Código: Selecionar todos

PROCEDURE Main

   Inkey(0)
   IF LastKey() == K_ESC
   ENDIF
Isso acima dá erro na compilação -w3 -es2.
Também vai dar erro em run-time pra quem não compila assim.
Porque ?
K_ESC é definido no arquivo INKEY.CH, faltou no fonte #include "inkey.ch"
Sem isso, K_ESC não existe, e vai dar erro de que nome não existe ou é desconhecido.

Com tanta coisa que a gente usa, o que não falta é arquivo CH contendo definições, e #include pra colocar nos fontes.