Sistema de Build
As aplicações FiveWin seguem um pipeline de build em múltiplos estágios: o Harbour compila o código-fonte
.prg em código C, o compilador C produz arquivos objeto, e o linker monta o
.exe final. O FWH fornece diversas ferramentas de build para automatizar este processo.
Pipeline de Build
Entender os estágios de build ajuda a diagnosticar erros. Cada estágio pode falhar independentemente, e as mensagens de erro diferem entre o Harbour, o compilador C e o linker.
Harbour Source"] -->|"harbour.exe
-n -w"| C[".c
Generated C"] C -->|"bcc32 / cl / gcc
compile"| OBJ[".obj
Object File"] RES[".rc
Resource Script"] -->|"brc32 / rc
compile"| RESO[".res
Resource"] OBJ -->|"ilink32 / link / gcc
link"| EXE[".exe
Application"] RESO --> EXE LIB["FiveWin .lib
Harbour .lib
C runtime .lib"] --> EXE
Estágio 1: Compilação Harbour
O compilador Harbour lê os arquivos .prg e produz arquivos .c.
Flags típicas:
harbour myapp.prg -i%FWH%\include -i%HARBOURDIR%\include -n -w -es2
| Flag | Finalidade |
|---|---|
-n | Não gerar procedimento de inicialização automático |
-w | Habilitar avisos |
-es2 | Parar em caso de erros (código de saída 2) |
-i<path> | Adicionar caminho de busca de includes |
-d<define> | Definir símbolo do preprocessador |
Estágio 2: Compilação C
O arquivo .c gerado é compilado pelo compilador C em um arquivo objeto.
Cada compilador possui flags diferentes; os scripts de build do FWH tratam isso automaticamente.
Estágio 3: Linkagem
O linker combina o arquivo objeto com a biblioteca FiveWin, as bibliotecas de runtime do Harbour, as bibliotecas de sistema do Windows e quaisquer arquivos de recurso para produzir o executável final.
Usando o build_new.bat
O script build_new.bat é a ferramenta de build universal recomendada. Ele trata
todas as variantes de compilador com uma única sintaxe:
build_new.bat <source.prg> <compiler_id>
IDs dos Compiladores
| ID | Harbour | Compilador C | Arquitetura | Biblioteca Utilizada |
|---|---|---|---|---|
hb32 |
Harbour | BCC 5.x (Borland) | 32-bit | FiveH32.lib |
hm32 |
Harbour | MSVC | 32-bit | FiveHM32.lib |
hm64 |
Harbour | MSVC | 64-bit | FiveH64.lib |
hg32 |
Harbour | MinGW GCC | 32-bit | FiveHG32.lib |
hg64 |
Harbour | MinGW GCC | 64-bit | FiveHG64.lib |
xb32 |
xHarbour | BCC 5.x (Borland) | 32-bit | FiveHx.lib |
xm64 |
xHarbour | MSVC | 64-bit | FiveHx64.lib |
Exemplos de Build
// Build with Borland BCC32 (classic, most common):
build_new.bat myapp.prg hb32
// Build with MSVC 64-bit (recommended for new projects):
build_new.bat myapp.prg hm64
// Build with GCC 64-bit:
build_new.bat myapp.prg hg64
// Build with xHarbour + BCC32:
build_new.bat myapp.prg xb32
Fluxo de Build Detalhado
Este diagrama mostra exatamente o que o build_new.bat faz internamente para um build BCC32:
Usando hbmk2 com Arquivos .hbp
Para projetos mais complexos com múltiplos arquivos-fonte, a ferramenta de build do Harbour
hbmk2 oferece um fluxo de trabalho baseado em arquivo de projeto. Crie um arquivo .hbp
(Harbour Project) para definir seu build:
Exemplo: test.hbp
# test.hbp - Harbour project file for FiveWin app
# Compiler settings
-gui
-mt
-w3
-es2
# Include paths
-inc
-i${FWH}/include
# FiveWin library
-l${FWH}/lib/FiveH64
# Harbour libraries
-lhbrtl
-lhbvm
-lhbmacro
-lhblang
-lhbrdd
-lrddntx
-lrddcdx
-lrddfpt
-lhbsix
-lhbct
-lhbwin
-lhbcpage
# Windows system libraries
-luser32
-lgdi32
-lcomdlg32
-lwinspool
-lcomctl32
-ladvapi32
-lshell32
-lole32
-loleaut32
-luuid
-lws2_32
-lwinmm
-lmpr
-lmsimg32
# Source files
test.prg
module1.prg
module2.prg
# Resource file
test.rc
Depois basta compilar com um único comando:
hbmk2 test.hbp
A ferramenta hbmk2 detecta automaticamente o compilador C instalado, compila
todos os arquivos .prg, compila o código C, linka tudo e gerencia builds
incrementais (recompila apenas os arquivos alterados).
Flags Úteis do hbmk2
| Flag | Finalidade |
|---|---|
-gui | Compilar como aplicação GUI (Windows), não console |
-mt | Habilitar suporte a multi-threading |
-w3 | Nível máximo de avisos |
-es2 | Parar em qualquer erro |
-inc | Habilitar builds incrementais |
-rebuild | Forçar recompilação completa |
-comp=msvc64 | Forçar compilador específico |
-trace | Mostrar os comandos sendo executados |
Convenção de Nomes das Bibliotecas
As bibliotecas do FiveWin seguem uma convenção de nomes que codifica a variante do Harbour e o compilador:
| Arquivo de Biblioteca | Harbour | Compilador | Bits |
|---|---|---|---|
FiveH32.lib | Harbour | BCC 5.x | 32 |
FiveHM32.lib | Harbour | MSVC | 32 |
FiveH64.lib | Harbour | MSVC | 64 |
FiveHG32.lib | Harbour | GCC / MinGW | 32 |
FiveHG64.lib | Harbour | GCC / MinGW-w64 | 64 |
FiveHx.lib | xHarbour | BCC 5.x | 32 |
FiveHx64.lib | xHarbour | MSVC | 64 |
Referência de Caminhos dos Compiladores
Caminhos padrão usados pelos scripts de build do FiveWin. Sobrescreva-os através de variáveis de ambiente se sua instalação for diferente:
| Variável | Caminho Padrão | Conteúdo |
|---|---|---|
BCCDIR |
C:\BCC55 |
Binários, lib e includes do BCC 5.x |
VCDIR |
C:\Program Files\Microsoft Visual Studio\2022\Community\VC |
Compilador MSVC (cl.exe, link.exe) |
MINGWDIR |
C:\mingw64 |
Binários, lib e includes do MinGW GCC |
HARBOURDIR |
C:\harbour |
Compilador Harbour, bibliotecas de runtime |
FWH |
C:\FWH |
Raiz do FiveWin: include, lib, source, samples |
Projetos com Múltiplos Arquivos
Aplicações reais consistem em múltiplos arquivos .prg. Existem duas abordagens principais:
Abordagem 1: Script Batch
Compile cada arquivo individualmente e linke-os juntos:
// compile.bat - Multi-file build with BCC32
harbour main.prg -i%FWH%\include -i%HARBOURDIR%\include -n -w
harbour customers.prg -i%FWH%\include -i%HARBOURDIR%\include -n -w
harbour reports.prg -i%FWH%\include -i%HARBOURDIR%\include -n -w
bcc32 -c -O2 main.c customers.c reports.c
ilink32 -Gn -aa -Tpe c0w32.obj main.obj customers.obj reports.obj, ^
myapp.exe,, FiveH32.lib harbour.lib cw32.lib import32.lib,, myapp.res
Abordagem 2: Arquivo de Projeto hbmk2
A abordagem mais simples e recomendada para projetos com múltiplos arquivos. Liste todos os arquivos .prg
no arquivo .hbp e deixe o hbmk2 gerenciar o build:
# myapp.hbp
-gui
-mt
-w3
-es2
-inc
-i${FWH}/include
-l${FWH}/lib/FiveH64
main.prg
customers.prg
reports.prg
utils.prg
myapp.rc
hbmk2 myapp.hbp
Arquivos de Recurso (.rc)
Arquivos de recurso do Windows definem ícones, bitmaps, diálogos e tabelas de strings que são incorporados ao executável. Aplicações FiveWin tipicamente possuem pelo menos um arquivo de recurso para o ícone da aplicação:
// myapp.rc - Minimal resource file
#include "FiveWin.rc"
APPICON ICON "myapp.ico"
Para aplicações que definem diálogos em arquivos de recurso (em vez de criá-los em tempo de execução),
você pode usar o Designer Visual do FiveWin (visual/visualfw.exe) para criar
arquivos .rc graficamente.
Dicas de Build
- Sempre limpe antes de trocar de compilador — arquivos objeto de um compilador
são incompatíveis com outro. Delete todos os arquivos
.obj,.c(gerados) e.resantes de trocar. - Use a flag
-w— Os avisos do Harbour ajudam a detectar variáveis não declaradas e erros de digitação precocemente. - Verifique o arquivo .ppo — Quando um comando não funciona como esperado, examine
a saída do preprocessador (
.ppo) para ver como os comandos do FiveWin se expandem. - Considerações sobre 64-bit — Ao compilar para 64-bit, garanta que todas as bibliotecas (FiveWin, Harbour, terceiros) também sejam 64-bit. Misturar bibliotecas 32-bit e 64-bit causará erros de linkagem.
- Builds incrementais com hbmk2 — A flag
-incpula a recompilação de arquivos não alterados, acelerando significativamente os builds.
Próximos Passos
- Visão Geral — Conheça a arquitetura e a hierarquia de classes do FiveWin
- Instalação — Configure seu ambiente de desenvolvimento
- TWindow — Comece a construir com a classe base de janela
- TXBrowse — Construa grids de dados para suas aplicações