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.
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
| Flag | Propósito |
|---|---|
-n | No generar procedimiento de inicio automático |
-w | Habilitar advertencias |
-es2 | Detener 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.
Etapa 3: Enlazado
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:
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
| Flag | Propósito |
|---|---|
-gui | Compilar como aplicación GUI (Windows), no de consola |
-mt | Habilitar soporte multi-hilo |
-w3 | Nivel máximo de advertencias |
-es2 | Detener ante cualquier error |
-inc | Habilitar compilaciones incrementales |
-rebuild | Forzar recompilación completa |
-comp=msvc64 | Forzar un compilador específico |
-trace | Mostrar 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.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 |
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
- Limpia siempre antes de cambiar de compilador — los archivos objeto de un compilador
son incompatibles con otro. Elimina todos los archivos
.obj,.c(generados) y.resantes de cambiar. - Usa el flag
-w— Las advertencias de Harbour ayudan a detectar variables no declaradas y errores tipográficos tempranamente. - Revisa el archivo .ppo — Cuando un comando no funciona como se espera, examina
la salida del preprocesador (
.ppo) para ver cómo se expanden los comandos de FiveWin. - Consideraciones de 64 bits — Al compilar para 64 bits, asegúrate de que todas las librerías (FiveWin, Harbour, de terceros) sean también de 64 bits. Mezclar librerías de 32 y 64 bits causará errores de enlazado.
- Compilaciones incrementales con hbmk2 — El flag
-incomite la recompilación de archivos sin cambios, acelerando significativamente las compilaciones.
Próximos Pasos
- Visión General — Conoce la arquitectura y jerarquía de clases de FiveWin
- Instalación — Configura tu entorno de desarrollo
- TWindow — Comienza a construir con la clase base de ventana
- TXBrowse — Crea grids de datos para tus aplicaciones