Sistema de Construcción

Las aplicaciones FiveWin siguen un proceso de compilación en múltiples etapas: Harbour compila el código fuente .prg a código C, el compilador C produce archivos objeto, y el enlazador ensambla el .exe final. FWH proporciona varias herramientas de compilación para automatizar este proceso.

Proceso de Compilación

Comprender las etapas de compilación ayuda a diagnosticar errores. Cada etapa puede fallar de forma independiente, y los mensajes de error difieren entre Harbour, el compilador C y el enlazador.

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

Etapa 1: Compilación Harbour

El compilador Harbour lee los archivos .prg y produce archivos .c. Flags típicos:

harbour myapp.prg -i%FWH%\include -i%HARBOURDIR%\include -n -w -es2
FlagPropósito
-nNo generar procedimiento de inicio automático
-wHabilitar advertencias
-es2Detener ante errores (código de salida 2)
-i<path>Agregar ruta de búsqueda de includes
-d<define>Definir símbolo del preprocesador

Etapa 2: Compilación C

El archivo .c generado es compilado por tu compilador C en un archivo objeto. Cada compilador tiene flags distintos; los scripts de compilación de FWH gestionan esto automáticamente.

El enlazador combina tu archivo objeto con la librería de FiveWin, las librerías del runtime de Harbour, las librerías del sistema Windows y cualquier archivo de recursos para producir el ejecutable final.

Uso de build_new.bat

El script build_new.bat es la herramienta de compilación universal recomendada. Gestiona todas las variantes de compilador con una única sintaxis:

build_new.bat <source.prg> <compiler_id>

IDs de Compilador

ID Harbour Compilador C Arquitectura Librería 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

Ejemplos de Compilación

// 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

Flujo de Compilación Detallado

Este diagrama muestra exactamente lo que build_new.bat hace internamente para una compilación con 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!

Uso de hbmk2 con Archivos .hbp

Para proyectos más complejos con múltiples archivos fuente, la herramienta de compilación de Harbour hbmk2 proporciona un flujo de trabajo basado en archivos de proyecto. Crea un archivo .hbp (Harbour Project) para definir tu compilación:

Ejemplo: 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

Luego compila con un solo comando:

hbmk2 test.hbp

La herramienta hbmk2 detecta automáticamente el compilador C instalado, compila todos los archivos .prg, compila el código C, enlaza todo y gestiona compilaciones incrementales (solo recompila los archivos modificados).

Flags Útiles de hbmk2

FlagPropósito
-guiCompilar como aplicación GUI (Windows), no de consola
-mtHabilitar soporte multi-hilo
-w3Nivel máximo de advertencias
-es2Detener ante cualquier error
-incHabilitar compilaciones incrementales
-rebuildForzar recompilación completa
-comp=msvc64Forzar un compilador específico
-traceMostrar los comandos que se ejecutan

Convención de Nombres de Librerías

Las librerías de FiveWin siguen una convención de nombres que codifica la variante de Harbour y el compilador:

Archivo de Librería Harbour Compilador Bits
FiveH32.libHarbourBCC 5.x32
FiveHM32.libHarbourMSVC32
FiveH64.libHarbourMSVC64
FiveHG32.libHarbourGCC / MinGW32
FiveHG64.libHarbourGCC / MinGW-w6464
FiveHx.libxHarbourBCC 5.x32
FiveHx64.libxHarbourMSVC64

Referencia de Rutas de Compiladores

Rutas predeterminadas utilizadas por los scripts de compilación de FiveWin. Sobrescríbelas mediante variables de entorno si tu instalación difiere:

Variable Ruta Predeterminada Contiene
BCCDIR C:\BCC55 Binarios, lib e include de BCC 5.x
VCDIR C:\Program Files\Microsoft Visual Studio\2022\Community\VC Compilador MSVC (cl.exe, link.exe)
MINGWDIR C:\mingw64 Binarios, lib e include de MinGW GCC
HARBOURDIR C:\harbour Compilador Harbour, librerías del runtime
FWH C:\FWH Raíz de FiveWin: include, lib, source, samples

Proyectos con Múltiples Archivos

Las aplicaciones reales constan de múltiples archivos .prg. Hay dos enfoques principales:

Enfoque 1: Script Batch

Compilar cada archivo individualmente y enlazarlos 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

Enfoque 2: Archivo de Proyecto hbmk2

El enfoque más sencillo y recomendado para proyectos con múltiples archivos. Lista todos los archivos .prg en el archivo .hbp y deja que hbmk2 gestione la compilación:

# 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

Archivos de Recursos (.rc)

Los archivos de recursos de Windows definen iconos, bitmaps, diálogos y tablas de cadenas que se incrustan en el ejecutable. Las aplicaciones FiveWin típicamente tienen al menos un archivo de recursos para el icono de la aplicación:

// myapp.rc - Minimal resource file
#include "FiveWin.rc"

APPICON ICON "myapp.ico"

Para aplicaciones que definen diálogos en archivos de recursos (en lugar de crearlos en tiempo de ejecución), puedes usar el Diseñador Visual de FiveWin (visual/visualfw.exe) para crear archivos .rc de forma gráfica.

Consejos de Compilación

Próximos Pasos