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.

flowchart LR PRG[".prg
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
FlagFinalidade
-nNão gerar procedimento de inicialização automático
-wHabilitar avisos
-es2Parar 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.

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:

sequenceDiagram participant User participant Script as build_new.bat participant HRB as Harbour Compiler participant BCC as BCC32 (C Compiler) participant BRC as BRC32 (Resource Compiler) participant LNK as ILink32 (Linker) User->>Script: build_new.bat myapp.prg hb32 Script->>Script: Detect compiler paths Script->>Script: Set include/lib paths Script->>HRB: harbour myapp.prg -n -w -i... HRB-->>Script: myapp.c Script->>BCC: bcc32 -c -O2 myapp.c BCC-->>Script: myapp.obj alt Has .rc file Script->>BRC: brc32 -r myapp.rc BRC-->>Script: myapp.res end Script->>LNK: ilink32 myapp.obj + FiveH32.lib + harbour.lib ... LNK-->>Script: myapp.exe Script-->>User: Build complete!

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

FlagFinalidade
-guiCompilar como aplicação GUI (Windows), não console
-mtHabilitar suporte a multi-threading
-w3Nível máximo de avisos
-es2Parar em qualquer erro
-incHabilitar builds incrementais
-rebuildForçar recompilação completa
-comp=msvc64Forçar compilador específico
-traceMostrar 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.libHarbourBCC 5.x32
FiveHM32.libHarbourMSVC32
FiveH64.libHarbourMSVC64
FiveHG32.libHarbourGCC / MinGW32
FiveHG64.libHarbourGCC / MinGW-w6464
FiveHx.libxHarbourBCC 5.x32
FiveHx64.libxHarbourMSVC64

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

Próximos Passos