[ contenidos | #winprog ]

Herramientas de Línea de Comando para Borland C++

Cómo Obtenerlas

Afortunadamente para aquellos que quieren introducirse en el desarrollo en Windows, Borland ha ofrecido sus herramientas de línea de comando para el público en general de forma gratuíta. ¿Que carácteristicas tienen estos compiladores? Bueno, no incluyen un hermoso IDE (Entorno Integrado de Desarrollo) o un editor de recursos, pero debo decir que el compilador en sí es mejor (lejos) que LCC-Win32 (el cual aún no inluye C++) o la gran cantidad que andan dando vueltas como gcc, mingw, cygwin, djgpp, etc...

Lee el archivo Readme para obtener ayuda de cómo configurarlo.

Borland C++ 5.5 Lo bueno de este compilador es que viene con un debugger! No lo he usado, por lo tanto no puedo ofrecerte mucha ayuda sobre él, pero es mejor que nada. Si has usado Turbo C++ en la época del DOS, puedo decirte que es algo parecido.

Por alguna razón Internet Explorer parece tener algún problema descargando este archivo, ya que hacer click sobre el link no funciona. Lo mejor es hacer click con el botón derecho y luego hacer click en copiar vínculo, por último usa tu cliente FTP favorito para descargarlo.

Turbo Debugger

Por último, pero no menos importante, un archivo de ayuda de Windows con una Referencia Completa de Win32 API. Tiene algunos años, pero todavía es apropiada y es mucho mas conveniente que MSDN online, a menos que necesites acceder a los agregados mas recientes en la API. Yo los uso regularmente.

Win32 API Reference

Cómo usarlas

Comandos Básicos

Si quieres compilar un programa de un solo archivo (por ejemplo simple_window.c), entonces puedes usar el siguiente comando:
bcc32 -tW simple_window.c

La opción -tW especifica una aplicaión GUI Win32, en vez de la aplicación en consola que se utiliza por default. Puedes compilar múltiples archivos dentro de un solo archivo .exe agregando los otros archivos al final de dicho comando.

Enlazando los Recursos

Este es un aspecto muy frustante para muchos usuarios de línea de comando, parece ser que borland intenta hacerlo lo mas difícil posible. El compilador de recursos brc32 no se comporta como lo hacía en las primeras versiones donde podía enlazar los recursos compilados dentro de el archivo .exe. Cuando ejecutas brc32 sin opciones para obtener la ayuda, todavía muestra una opción para poner el enlazado .exe enOFF, pero parece no haber una forma de ponerlo en ON.

He intentado varias combinaciones de comandos y opciones pero no encuentro la forma de agregar un archivo .res a un .exe creado con el método anterior, lo que es bastante molesto debido a que la forma que he encotrado para hacerlo es bastante mas complicada.

Sin embargo hay una forma fácil...

BC++ ahora tienen un método alternativo para incluir recursos en un programa mediante el uso de un #pragma (una directiva no-estándar del preprocesador que el compilador ignorará si no la reconoce).

#pragma resource "app_name.res"

Al poner este código dentro de tu archivo principal .c o .cpp, el compilador automáticamente enlazará el archivo .res que es generado a partir de archivo de recursos .rc (.res es como un .obj)

Usar la directiva #pragma te permitirá compilar programas de una forma simple como la anterior, pero recuerda que antes necesitas compilar el archivo .rc usando brc32.

La forma difícil

Estos son los comando que hay que usar para compilar el ejemplo dlg_one, incluyendo el archivo de recursos.

bcc32 -c -tW dlg_one.c
ilink32 -aa -c -x -Gn dlg_one.obj c0w32.obj,dlg_one.exe,,import32.lib cw32.lib,,dlg_one.res

La opción -c de bcc32 significa "solo compilar", no enlazar dentro de un .exe. Las opciones -x -Gn libera algunos archivos extra que genera el enlazador, que probablemente no necesites.

Para hacer las cosas mas fácil, lo mejor es hacer todo esto en un archivo makefile. He preparado uno genérico que debería funcionar con todos los ejemplos de este tutorial y deberías ser capaz de adaptarlo a cualquiera de tus programas.

APP      = dlg_one
EXEFILE  = $(APP).exe
OBJFILES = $(APP).obj 
RESFILES = $(APP).res
LIBFILES =
DEFFILE  =

.AUTODEPEND
BCC32   = bcc32
ILINK32 = ilink32
BRC32   = brc32

CFLAGS  = -c -tWM- -w -w-par -w-inl -W -a1 -Od
LFLAGS  = -aa -V4.0 -c -x -Gn
RFLAGS  = -X -R 
STDOBJS = c0w32.obj
STDLIBS = import32.lib cw32.lib

$(EXEFILE) : $(OBJFILES) $(RESFILES)
   $(ILINK32) $(LFLAGS) $(OBJFILES) $(STDOBJS), $(EXEFILE), , \
      $(LIBFILES) $(STDLIBS), $(DEFFILE), $(RESFILES)

clean:
   del *.obj *.res *.tds *.map

Sólo necesitas modificar las primeras 6 líneas con la información apropiada.


Copyright © 1998-2003, Brook Miles (theForger). All rights reserved.

Versión en Español: FedericoPizarro - 2003