Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

BlackTDN :: Harbour, Opções do Compilador

Harbour Make (hbmk2) 3.2.0dev (Rev. 18805)
Copyright (c) 1999-2013, Viktor Szak ts
http://harbour-project.org/
Translation (pt-BR): Vailton Renato <vailtom@gmail.com>

Sintaxe:

hbmk2 [opçäes] [<script[s]>] <src[s][.prg|.c|.obj|.o|.rc|.res|.def|.po|.pot|.hbl|@.clp|.d|.ch]>
Opções
-o<outname> nome de arquivo de saída
-l<libname> linkar com a biblioteca <libname>. <libname> deve omitir
path, extensão e o prefixo 'lib' (… menos que faça parte
do nome-de-arquivo).
-L<libpath> path adicional para pesquisar por bibliotecas
-i<p>|-incpath=<p> paths adicionais para pesquisa de arquivos headers
-static|-shared linkar com bibliotecas estáticas/compartilhadas
-mt|-st linkar com suporte multi ou single-thread na HVM
-gt<name> linkar com o driver GT selecionado. Este parâmetro
GT<name> pode ser especificado mais de uma vez e o
primeiro driver GT informado ser  o padrão no tempo de
execução
-inc[-] habilita o modo de compilação incremental
-hbexe create executable (default)
-hblib criar biblioteca estática
-hbdyn create dynamic library (without linked Harbour VM)
-hbdynvm criar biblioteca dinâmica
-hbimplib create import library

-gui|-std criar um executável GUI/console
-main=<mainfunc> sobrescreva o nome da função/procedimento inicial
-request=<func> force function/procedure to be linked
-fullstatic linkar com todas as bibliotecas estáticas
-pic[-] create position independent object code (always enabled
in -hbdyn/-hbdynvm modes)
-[full|fix]shared criar bin rio que faça uso da biblioteca compartilhada do
Harbour com referência absoluta (ou não) (padrão:
'fullshared' quando Harbour ‚ instalado no local do
sistema, caso contrário ser  'fixshared') (fix/full ‚
somente para *nix)
-nulrdd[-] linkar com o nulrdd
-debug[-] adicionar/excluir informações de debug do compilador C.
Para compilar com Harbour utilize a opção -b como de
costume.
-optim[-] alterna as otimizações do compilador C (ativado por
padrão)
-cpp[-] forçar compilação em modo C/C++
-cpp=<value> select C++ mode. Allowed values are: def, yes, no
-map[-] criar (ou não) o arquivo map
-implib[-] create (or not) an import library (in -hbdyn/-hbexe
mode). The name will have a postfix added.
-implib=<output> create import library (in -hbdyn/-hbexe mode) name to
<output> (default: same as output)
-ln=<link> create symbolic link pointing to <output> (<link> is
considered relative to <output>)
-strip[-] strip (ou não) arquivos binários
-trace[-] exibir os comandos executados
-beep[-] ativa (ou desativa) um beep simples em caso de sucesso ou
um beep duplo em caso de erro
-ignore[-] ignore erros quando executar as ferramentas de compilação
(padrão: off)
-hbcppmm[-] override standard C++ memory management functions with
Harbour ones
-winuni[-] select between UNICODE (WIDE) and ANSI compilation modes
(default: ANSI) (Windows only. For WinCE it is always set
to UNICODE)
-nohblib[-] não usar bibliotecas estáticas do núcleo do Harbour
quando linkar
-nodefgt[-] do not link default GTs (effective in -static mode)
-nolibgrouping[-] desativar agrupamento de LIBs em compiladores baseados no
gcc.
-nomiscsyslib[-] não adicione bibliotecas extras do sistema … lista padrão
de bibliotecas
-traceonly exibir os comandos … serem executados, mas não execute-os
-warn=<lev> define o nível de avisos (warnings) do compilador C
<lev> pode ser: max, yes, low, no, def (padrão: yes)
-compr=<lev> comprime o execut vel/biblioteca dinƒnica (necessita de
UPX)
<lev> pode ser: yes, no, min, max
-run[-] executar/não executar o aplicativo gerado.
-vcshead=<file> gera um arquivo .ch com informações do repositório local.
SVN, CVS, Git, Mercurial, Bazaar, Fossil e Monotone estão
entre as ferramentas atualmente suportadas. O arquivo
gerado conter  a diretiva _HBMK_VCS_TYPE_ com o nome do
VCS detectado e _HBMK_VCS_ID_ com o unique ID do
repositório local
-tshead=<file> gerar cabeçalho .ch com informação de data/hora.
Cabeçalho gerado conter  as macros _HBMK_BUILD_DATE_,
_HBMK_BUILD_TIME_, _HBMK_BUILD_TIMESTAMP_ com a data/hora
de criação do arquivo.
-icon=<file> seta o ícone para o aplicativo. <file> deve possuir um
formato compatível com a plataforma de destino
-manifest=<file> embed manifest <file> in executable/dynamic lib (Windows
only)
-sign=<key> sign executable with <key> (Windows and Darwin only)
-signpw=<pw> use <pw> as password when signing executable (Windows and
Darwin only)
-instfile=<g:file> add <file> in to the list of files to be copied to path
specified by -instpath option. <g> is an optional copy
group (case sensitive), it must be at least two
characters long. In case you don't specify <file>, the
list of files in that group will be emptied.
-instpath=<g:path> copy target to <path>. if <path> is a directory, it
should end with path separatorm, in this case files
specified by -instfile option will also be copied. can be
specified multiple times. <g> is an optional copy group,
it must be at least two characters long. Build target
will be automatically copied to default (empty) copy
group.
-instforce[-] copy target to install path even if it is up to date
-depimplib[-] enable (or disable) import library generation for import
library sources specified in -depimplibs= options
(default: yes)
-stop[=<text>] interromper sem executar nada
-echo=<text> ecoa texto na tela
-pause forçar pause por uma tela em caso de erro (somente com
driver GT alternativo)
-info ativar mensagens informativas
-quiet[-] suprimir todas as mensagens

-bldf[-] herdar flags do Harbour: todos/nenhum (padrão)
-bldf=[p][c][l] herdar todos os flags .prg/.c/linker (ou nenhum)
provindos do Harbour
-F<framework> link with <framework> framework (Darwin only)
-cflag=<f> especifica flags para o compilador C
-resflag=<f> especifica flags para o compilador de recursos (apenas
windows)
-ldflag=<f> especifica flags para o linkeditor (execut vel)
-aflag=<f> passa flag para o linkeditor (lib estática)
-dflag=<f> informar flags para o linkeditor (biblioteca dinƒnica)
-iflag=<f> pass single flag to import library creation command
-prgflag=<f> especifica flags para o Harbour
-runflag=<f> argumentos … serem passados ao executável gerado quando
-run for utilizado
-cflag+=<f> pass single flag to C compiler overriding C compiler
flags added by hbmk2 itself. Use with caution.
-3rd=<f> options/flags reserved for 3rd party tools, always
ignored by hbmk2 itself
-env:<e>[<o>[<v>]] alter local environment. <e> is the name of the
environment variable to alter. <o> can be '=' to
set/override, '-' to delete, '+' to append to the end of
existing value, '#' to insert to the beginning of
existing value. <v> is the value to set/append/insert.
-jobs=<n> dispara <n> threads de compilação (apenas plataformas
multiprocessadas)
-head=<m> control source header parsing (in incremental build mode)
<m> can be: native (uses compiler to extract
dependencies), full (default, uses simple text parser on
the whole file), dep, off
-rebuild rebuild (in incremental build mode)
-rebuildall rebuild with sub-projects (in incremental build mode)
-clean compilação limpa (em modo de compilação incremental)
-workdir=<dir> working directory
(default: .hbmk/plat/comp in incremental mode, OS temp
directory otherwise)

-hbl[=<output>] nome-de-arquivo .hbl resultante. A macro %{hb_lng} ‚
aceita no nome-de-arquivo.
-lng=<languages> lista de idiomas … serem substituídos nas macros
%{hb_lng} nos arquivos .pot/.po e nos nomes de arquivos
de saída .hbl/.po. Lista separada por vírgula:
-lng=en,hu-HU,de
-po=<output> criar/atualizar arquivo .po … partir dos fontes. Se um
arquivo .po com o mesmo nome existir, o arquivo ser  mesclado.
-minipo[-] adicionar (ou não) a referência do n£mero da versão do
Harbour e o arquivo de origem ao .po (ativo por padrão)
-rebuildpo recria o arquivo .po removendo assim todas as entradas
obsoletas no mesmo

-hbx=[<.ch>] Create Harbour header (in .hbx format) with all external
symbols. Empty parameter will disable it.
-autohbc=<.ch:.hbc> <.ch> is a header file name. <.hbc> is a .hbc filename to
be automatically included in case the header is found in
any of the compiled sources. (EXPERIMENTAL)

-deppkgname=<d:n> <d> is the name of the dependency. <n> name of the
package depedency. Can be specified multiple times.
-depkeyhead=<d:h> <d> is the name of the dependency. <h> is the key header
(.h) of the package dependency. Multiple alternative
headers can be specified.
-depoptional=<d:f> <d> is the name of the dependency. <f> can be 'yes' or
'no', specifies whether the dependency is optional.
Default: no
-depcontrol=<d:v> <d> is the name of the dependency. <v> is a value that
controls how detection is done. Accepted values: no, yes,
force, nolocal, local. Default: content of envvar
HBMK_WITH_<d>
-depincroot=<d:r> <d> is the name of the dependency. Set <r> as root
directory for paths specified in -depincpath options.
-depincpath=<d:i> <d> is the name of the dependency. Add <i> to the header
detection path list.
-depincpathlocal= <d> is the name of the dependency. Add <i> to the header
<d:i> detection path list, where <i> is pointing to a directory
local to the project and containing an embedded (or
locally hosted) dependency.
-depimplibs=<d:dll> <d> is the name of the dependency. Add <dll> to the
import library source list.
-depimplibd=<d:lib> <d> is the name of the dependency. Set generated import
library name to <lib>

-plugin=<filename> add plugin. <filename> can be: .hb, .prg, .hrb
-pi=<filename> pass input file to plugins
-pflag=<f> pass single flag to plugins

Options below are available on command line only:

-target=<script> specify a new build target. <script> can be .prg (or no
extension) or .hbp file. Note that .hbp files are
automatically considered as separate targets.

-hbrun executar alvo
-hbraw interromper após executar o compilador Harbour
-hbcmp|-clipper interromper após criar os arquivos objetos
criar um link ou copiar o hbmk2 para hbcmp/clipper
resultar  no mesmo efeito
-hbcc accept raw C flags
create link/copy hbmk2 to hbcc for the same effect
-hblnk parƒmetros específicos do linkeditor.
-autohbm[-] enable (or disable) processing of hbmk.hbm in current
directory (default: yes)
-hb10 habilita modo de compatibilidade 'Harbour 1.0.x'
-hb20 enable Harbour 2.0.x compatibility mode
-xhb habilitar modo xHb
-hbc ativa modo C puro
-rtlink
-blinker
-exospace emula o comportamento de um linkeditor compatível com
clipper
criar um link ou copiar o hbmk2 para
rtlink/blinker/exospace resultar  no mesmo efeito

-hbreg[=global] register Harbour Script (.hb) with hbmk2 (Windows only)
-hbunreg[=global] unregister Harbour Script (.hb) from hbmk2 (Windows only)

-hbmake=<file> converte um projeto do hbmake em um arquivo .hbp
-xbp=<file> converte um projeto .xbp (xbuild) em um arquivo .hbp
-xhp=<file> converte um projeto .xhp (xMate) em um arquivo .hbp

--hbdirbin exibe o diretório dos binários do Harbour
--hbdirdyn exibe o diretório das bibliotecas dinâmicas do Harbour
--hbdirlib exibe o diretório das bibliotecas estáticas do Harbour
--hbdirinc exibe o diretório dos headers do Harbour
--hbinfo[=nested] output Harbour build information. Output is in JSON
format. The included paths always contain forward
slashes. Each JSON block is followed by an 0x0A byte.

-plat=<platform> force/select target platform (default: autodetection)
-comp=<compiler> force/select C compiler (default: autodetection)
Special value:
- bld: use original build settings (default on *nix)
-cpu=<cpu> select target CPU. (EXPERIMENTAL)
-build=<name> utilizar um nome de build especifico
-lang=<lang> sobrepor o idioma padrão. Semelhante … variavel HB_LANG.
-width=<n> set output width to <n> characters (0=unlimited).
-shl show sub-project level in output lines
--version exibir somente o cabeçalho com a versão do hbmk

Notas:
- <script> can be:
<@script> or <script.hbm>: command line options in file
<script.hbp>: command line options in file, it also marks a new target if
specified on the command line
<script.hbc>: package configuration file
- Multiplos parâmetros -l, -L, -i e <script> são aceitos.
- Opções usadas com o compilador Harbour também são aceitas.
- O arquivo de configuração hbmk.hbc no diretório do hbmk2 sempre ser
processado caso exista. Em plataformas *nix este arquivo ‚ sempre procurado
nas pastas ~/.harbour, /etc/harbour, <base>/etc/harbour, <base>/etc
(exatamente nesta ordem) antes da pasta que cont‚m o hbmk2.
- O script hbmk.hbm no diretório atual ser  sempre processado se existir.
- .hbc options (they should come in separate lines): libs=[<libname[s]>],
hbcs=[<.hbc file[s]>], gt=[gtname], syslibs=[<libname[s]>],
frameworks=[<framework[s]>], prgflags=[Harbour flags], cflags=[C compiler
flags], resflags=[resource compiler flags], ldflags=[linker flags],
pflags=[flags for plugins], libpaths=[paths], sources=[source files],
headers=[Harbour header files], psources=[source files for plugins],
incpaths=[paths], requests=[func], instfiles=[files], instpaths=[paths],
autohbcs=[<.ch>:<.hbc>], plugins=[plugins],
gui|mt|pic|shared|nulrdd|nodefgt|debug|opt|map|strip|hbcppmm|winuni|implib|
run|inc=[yes|no], cpp=[yes|no|def], warn=[max|yes|low|no|def],
compr=[yes|no|min|max], head=[off|full|native|dep], skip=<reason>,
stop=<reason>, echo=<text>
Lines starting with '#' char are ignored
- Os filtros para plataformas são aceitos para cada uma das linhas de um
arquivo .hbc e possuem diversas opçäes.
Formato de um filtro:
{[!][<arquitetura>|<compilador>|<cpu>|<palavra-chave>]}. Os filtros podem
ser combinados usando os operadores '&', '|' e agrupados por parênteses.
Ex.: {win}, {gcc}, {linux|darwin}, {win&!pocc}, {(win|linux)&!watcom},
{unix&mt&gui}, -cflag={win}-DMYDEF, -stop{dos}, -stop{!allwin},
{allwin|allmsvc|allgcc|allmingw|allicc|allbcc|allpocc|unix},
{x86|x86_64|ia64|arm|mips|sh},
{debug|nodebug|gui|std|mt|st|shared|static|winuni|winansi|xhb}
- Algumas opções do .hbc (libs=, hbcs=, prgflags=, cflags=, ldflags=,
libpaths=, instfiles=, instpaths=, echo=) e seus correspondentes parƒmetros
de linha-de-comando aceitam as seguintes macros: ${hb_root}, ${hb_dir},
${hb_dirname}, ${hb_name}, ${hb_self}, ${hb_curdir}, ${hb_tempdir},
${hb_targetname}, ${hb_targettype}, ${hb_plat}, ${hb_comp}, ${hb_comp_ver},
${hb_build}, ${hb_cpu}, ${hb_work}, ${hb_workdynsub}, ${hb_dynprefix},
${hb_dynsuffix}, ${hb_dynext}, ${hb_ver}, ${hb_verstr}, ${hb_major},
${hb_minor}, ${hb_release}, ${hb_status}, ${hb_revision}, ${hb_host_plat},
${hb_host_plat_unix}, ${hb_bin}, ${hb_lib}, ${hb_lib3rd}, ${hb_dyn},
${hb_inc}, ${hb_first}, ${hb_outputdir}, ${hb_outputname}, ${hb_level},
${<envvar>}. libpaths= tamb‚m aceitam %{hb_name} que se traduz como o nome
do arquivo .hbc sob pesquisa.
- Opções aceitando macros tamb‚m suportam linhas de comando. Neste caso basta
rodeiar o comando dentro de ``, e, se o comando contiver espaço, tamb‚m
adicione aspas duplas. i.e. "-cflag=`wx-config --cflags`", ou
ldflags={unix&gcc}"`wx-config --libs`".
- Libraries and object files built with/for CA-Cl*pper won't work with any
supported platform/compiler.
- Defaults and feature support may vary by platform/compiler.
- As opções tamb‚m podem ser especificados na vari vel de ambiente
HBMK_OPTIONS
- .hb or .hrb file passed as first parameter will be run as Harbour script.
Note, for Harbour scripts, the codepage is set to UTF-8 by default.
- . (dot) passed as first parameter will enter the interactive Harbour shell.

Valores suportados para <comp> conforme a <plat> disponível:
- linux : gcc, clang, icc, watcom, sunpro, open64
- darwin : gcc, clang, icc
- win : mingw, msvc, clang, bcc, bcc64, watcom, icc, pocc, xcc,
mingw64, msvc64, msvcia64, iccia64, pocc64
- wce : mingwarm, mingw, msvcarm, poccarm
- os2 : gcc, gccomf, watcom
- dos : djgpp, watcom
- bsd : gcc, clang, pcc
- hpux : gcc
- beos : gcc
- qnx : gcc
- android : gcc, gccarm
- vxworks : gcc, diab
- symbian : gcc
- cygwin : gcc
- minix : gcc, clang, ack
- aix : gcc
- sunos : gcc, sunpro


 


[]s
иαldσ dj

Comentários

  1. Preciso saber como criar uma .LIB com o Harbour 3.0.
    Criei o seguinte .hbp:
    # SIBRAHB3
    -inc
    -b
    -m
    -rebuild
    -hblib
    -oSIBRAHB3
    SIUVERAO.PRG
    SUBSIBRA.PRG

    Entretanto, criou um arquivo libSIBRAHB3.a
    Quero criar SIBRAHB.LIB

    ResponderExcluir
  2. Utitilze o Barland C para compilar a sua .lib.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas