Usando el comando HBMK2 de Harbour

Usando HBMK2    ( traduccion de un email de Massimo Belgrano – Harbour Italy )

hbmk2 es una herramienta que permite compilar un ejemplo o un proyecto completo
El uso basico de esta herramienta es :
hbmk2 ac_test
hbmk2 ac_test.prg
Despues de este comando ud tiene  ac_test.exe creado  (ac_test en caso de linux )
Ud  puede ejecutarlo inmediatamente  simplemente usando
Hbmk2 ac_test -run

Hbmk2 es independiente de la plataforma y el compilador que ud use.

Please also try the recommended way with hbmk2, it does 
a similar job to your manual Makefile, but it’s portable, works 

for all future test programs and just one line.

If hbmk2 doesn’t work for you for some reason, post your -trace output

Como compilar varios  .PRG y librerias ?

hbmk2 test1 test2 testn -lmylib1 -lmylib2 -lmylibn
hbmk2 test1.prg test2.prg testn.prg mylib1.lib mylib2.lib mylibn.lib

Como crear una libreria ?

hbmk2 myprg1.PRG myprg2.prg myrc.rc  -b -m  –hblib -omiolib.lib

Como obtener informacion adicional al compilar con hbmk2 ?

hbmk2 test1 test2 testn -lmylib1 -lmylib2 -lmylibn

hbmk2 ac_test -info -trace 

Que es hbmk2 ?

«hbmk2» trata de generar una archivo ejecutable a partir de su  archivo .prg . 
Es tambien un simple equivalente al cl.bat de la distibucion CA-CLIPPER.

HBMK2 acepta los siquientes modificadores ( switches):

-o<outputfilename>      # output file name
-static                 # link with static Harbour libs
-fullstatic             # link with all static libs
-shared                 # link with shared libs (default)
-mt                     # link with multi-thread libs
-gt<hbgt>               # link with <hbgt> GT driver, can be repeated to
                        # link with more GTs. The first one will be
                        #      the default at runtime
-l<libname>             # link with <libname> library
-L<libpath>             # additional path to search for libraries
-fmstat                 # link with the memory statistics lib
-nofmstat               # do not link with the memory statistics lib (default)
-[no]strip              # strip (no strip) binaries
-main=<main_func>       # set the name of main program function/procedure.
                        # if not set then ‘MAIN’ is used or if it doesn’t
                        # exist the name of first public function/procedure
                        # in first linked object module (link)

Como  usar  compilacion incremental ?

hbmk2 test1 test2 testn -lmylib1 -lmylib2 -lmylibn -rebuild              

 Por defecto el sistema operativo habilita el modo de compilacion incremental , osea solo las partes modificados
de su proyecto seran recompiladas.
Si ud desea una recompilacion completa el modificador 
 -rebuild  lo permite

Como usar un archivo de configuracion de  libreria  (hbc)?

El archivo .hbc contiene las librerias usadas por el proyecto

Tipicamente existe una plantilla para cada libreria que permite incluir todas las

referencias necesarias vea por ejemplo:

Ud puede usar  el archivo .hbc agregandolo a la linea de comando de  hbmk2
Tambien lo puede usar dentro de un archivo .hbp agregando una linea con el path donde reside el archivo .hbc
# $Id: hbxbp.hbc 11447 2009-06-20 02:41:38Z vszakats $

Como usar un archivo de proyecto (.hbp)?

Ud simplemente puede usar :
hbmk2 hbide.hbp
El archivo .hbp  contiene  todos los comandos de la linea de comandos
# $Id: hbide.hbp 13463 2010-01-04 10:15:18Z vouchcac $
-w3 -es2 -gc3
# Trick to make it link using default Harbour builds

Que es

Is a default setting applied to all source compiled in this directory

Como obtener ayuda ?

hbmk2 – help

Harbour Make (hbmk2) 2.0.1dev (Rev. 13476)
Copyright (c) 1999-2010, Viktor Szakats
Translation (it-IT): (add your name here)
  hbmk2 [options] [<script[s]>] <src[s][.prg|.c|.obj|.o|.rc|.res|.po|.pot|.hbl|@.clp|.d]>
  -o<outname>        output file name
  -l<libname>        link with <libname> library. <libname> should be without
                     path, extension and ‘lib’ prefix (unless part of libname).
  -L<libpath>        additional path to search for libraries
  -i<p>|-incpath=<p> additional path to search for headers
  -static|-shared    link with static/shared libs
  -mt|-st            link with multi/single-thread VM
  -gt<name>          link with GT<name> GT driver, can be repeated to link with
                     more GTs. First one will be the default at runtime
  -hblib             create static library
  -hbdyn             create dynamic library
  -gui|-std          create GUI/console executable
  -main=<mainfunc>   override the name of starting function/procedure
  -fullstatic        link with all static libs
  -[full|fix]shared  create shared Harbour binaries without/with absolute dir
                     reference to Harbour library (default: ‘fullshared’ when
                     Harbour is installed on system location, ‘fixshared’
                     otherwise) (fix/full option in *nix only)
  -nulrdd[-]         link with nulrdd
  -[no]debug         add/exclude C compiler debug info. For Harbour level
                     debug, use Harbour option -b as usual
  -[no]optim         toggle C compiler optimizations (default: on)
  -[no]cpp[=def]     force C/C++ mode or reset to default
  -[no]map           create (or not) a map file
  -[no]implib        create (or not) an import library (in -hbdyn mode)
  -[no]strip         strip (no strip) binaries
  -[no]trace         show commands executed
  -[no]beep          enable (or disable) single beep on successful exit, double
                     beep on failure
  -[no]ignore        ignore errors when running compiler tools (default: off)
  -nohblib[-]        do not use static core Harbour libraries when linking
  -nolibgrouping[-]  disable library grouping on gcc based compilers
  -nomiscsyslib[-]   don’t add extra list of system libraries to default
                     library list
  -traceonly         show commands to be executed, but don’t execute them
  -[no]warn[=lev]    set C compiler warning level
                     <lev> can be: yes, no, def (default: yes)
  -[no]compr[=lev]   compress executable/dynamic lib (needs UPX)
                     <lev> can be: min, max, def
  -[no]run           run/don’t run output executable
  -vcshead=<file>    generate .ch header file with local repository
                     information. SVN, CVS, Git, Mercurial, Bazaar and Fossil
                     are currently supported. Generated header will define
                     macro _HBMK_VCS_TYPE_ with the name of detected VCS and
                     _HBMK_VCS_ID_ with the unique ID of local repository
  -tshead=<file>     generate .ch header file with timestamp information.
                     Generated header will define macros _HBMK_BUILD_DATE_,
                     _HBMK_BUILD_TIME_, _HBMK_BUILD_TIMESTAMP_ with the
                     date/time of build
  -icon=<file>       set <file> as application icon. <file> should be a
                     supported format on the target platform (experimental)
  -instpath=<path>   copy target to <path>. if <path> is a directory, it should
                     end with path separator. can be specified multiple times
  -nohbc             do not process .hbc files in current directory
  -stop              stop without doing anything
  -echo=<text>       echo text on screen
  -bldf[-]           inherit all/no (default) flags from Harbour build
  -bldf=[p][c][l]    inherit .prg/.c/linker flags (or none) from Harbour build
  -inctrypath=<p>    additional path to autodetect .c header locations
  -prgflag=<f>       pass flag to Harbour
  -cflag=<f>         pass flag to C compiler
  -resflag=<f>       pass flag to resource compiler (Windows only)
  -ldflag=<f>        pass flag to linker (executable)
  -aflag=<f>         pass flag to linker (static library)
  -dflag=<f>         pass flag to linker (dynamic library)
  -runflag=<f>       pass flag to output executable when -run option is used
  -jobs=<n>          start n compilation threads (multiprocess platforms only)
  -inc               enable incremental build mode
  -[no]head[=<m>]    control source header parsing (in incremental build mode)
                     <m> can be: native, full, partial (default), off
  -rebuild           rebuild all (in incremental build mode)
  -clean             clean (in incremental build mode)
  -workdir=<dir>     working directory for incremental build mode
                     (default: .hbmk/plat/comp)
  -hbl[=<output>]    output .hbl filename. %{hb_lng} macro is accepted in
  -lng=<languages>   list of languages to be replaced in %{hb_lng} macros in
                     .pot/.po filenames and output .hbl/.po filenames. Comma
                     separared list:
  -po=<output>       create/update .po file from source. Merge it with previous
                     .po file of the same name
  -[no]minipo        don’t (or do) add Harbour version number and source file
                     reference to .po (default: add them)
  -rebuildpo         recreate .po file, thus removing all obsolete entries in
  -target=<script>   specify a new build target. <script> can be .prg (or no
                     extension) or .hbm file (available on command line only)
  -target            marks beginning of options belonging to a new build target
                     (available on command line only)
  -alltarget         marks beginning of common options belonging to all targets
                     (available on command line only)
  -hbrun             run target
  -hbraw             stop after running Harbour compiler
  -hbcmp|-clipper    stop after creating the object files
                     create link/copy hbmk2 to hbcmp/clipper for the same
  -hbcc              stop after creating the object files and accept raw C
                     create link/copy hbmk2 to hbcc for the same effect
  -hblnk             accept raw linker flags
  -hb10              enable Harbour 1.0.x compatibility mode (experimental)
  -xhb               enable xhb mode (experimental)
  -hbc               enable pure C mode (experimental)
  -exospace          emulate Clipper compatible linker behavior
                     create link/copy hbmk2 to rtlink/blinker/exospace for the
                     same effect
  -hbmake=<file>     convert hbmake project file to .hbp file (experimental)
  -xbp=<file>        convert .xbp (xbuild) project file to .hbp file
  -xhp=<file>        convert .xhp (xMate) project file to .hbp file
  –hbdirbin         output Harbour binary directory
  –hbdirdyn         output Harbour dynamic library directory
  –hbdirlib         output Harbour static library directory
  –hbdirinc         output Harbour header directory
  -plat[form]=<plat> select target platform.
  -comp[iler]=<comp> select C compiler.
                     Special value:
                      – bld: use original build settings (default on *nix)
  -build=<name>      use a specific build name
  -lang=<lang>       override default language. Similar to HB_LANG envvar.
  –version          display version header only
  -pause             force waiting for a key on exit in case of failure (with
                     alternate GTs only)
  -info              turn on informational messages
  -quiet             suppress all screen messages
  – <script> can be <@script> (.hbm format), <script.hbm>, <script.hbp> (marks
    a new target) or <script.hbc>.
  – Multiple -l, -L and <script> parameters are accepted.
  – Regular Harbour compiler options are also accepted.
  – hbmk.cfg option file in hbmk2 directory is always processed if it exists.
    On *nix platforms ~/.harbour, /etc/harbour, <base>/etc/harbour, <base>/etc
    are checked (in that order) before the hbmk2 directory. The file format is
    the same as .hbc.
  – hbmk.hbm make script in current directory is always processed if it exists.
  – .hbc config files in current dir are automatically processed.
  – .hbc options (they should come in separate lines): libs=[<libname[s]>],
    hbcs=[<.hbc file[s]>], gt=[gtname], syslibs=[<libname[s]>],
    prgflags=[Harbour flags], cflags=[C compiler flags], resflags=[resource
    compiler flags], ldflags=[linker flags], libpaths=[paths], sources=[source
    files], incpaths=[paths], inctrypaths=[paths], instpaths=[paths],
    cpp=[yes|no|def], warn=[yes|no|def], compr=[yes|no|def|min|max],
    head=[off|partial|full|native], skip=[yes|no], echo=<text>
    Lines starting with ‘#’ char are ignored
  – Platform filters are accepted in each .hbc line and with several options.
    Filter format: {[!][<plat>|<comp>|<keyword>]}. Filters can be combined
    using ‘&’, ‘|’ operators and grouped by parantheses. Ex.: {win}, {gcc},
    {linux|darwin}, {win&!pocc}, {(win|linux)&!watcom}, {unix&mt&gui},
    -cflag={win}-DMYDEF, -stop{dos}, -stop{!allwin},
    {allpocc|allgcc|allmingw|unix}, {allmsvc}, {x86|x86_64|ia64|arm},
  – Certain .hbc lines (libs=, hbcs=, prgflags=, cflags=, ldflags=, libpaths=,
    inctrypaths=, instpaths=, echo=) and corresponding command line parameters
    will accept macros: ${hb_root}, ${hb_dir}, ${hb_name}, ${hb_plat},
    ${hb_comp}, ${hb_build}, ${hb_cpu}, ${hb_bin}, ${hb_lib}, ${hb_dyn},
    ${hb_inc}, ${<envvar>}. libpaths= also accepts %{hb_name} which translates
    to the name of the .hbc file under search.
  – Options accepting macros also support command substitution. Enclose command
    inside «, and, if the command contains space, also enclose in double
    quotes. F.e. «-cflag=`wx-config –cflags`», or
    ldflags={unix&gcc}»`wx-config –libs`».
  – Defaults and feature support vary by platform/compiler.
  – Options can also be specified in environment variable HBMK_OPTIONS
Supported <comp> values for each supported <plat> value:
  – linux  : gcc, clang, icc, watcom, sunpro, open64
  – darwin : gcc, clang, icc
  – win    : mingw, msvc, bcc, watcom, icc, pocc, cygwin, xcc,
  –          mingw64, msvc64, msvcia64, iccia64, pocc64
  – wce    : mingwarm, mingw, msvcarm, poccarm
  – os2    : gcc, gccomf, watcom
  – dos    : djgpp, watcom
  – bsd    : gcc
  – hpux   : gcc
  – beos   : gcc
  – sunos  : gcc, sunpro

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *