Como Compilar somente Alterações?

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Como Compilar somente Alterações?

Mensagem por Marcos »

Novamente em busca de respostas para uma questão ao meu ver de iniciante bastante complicada, e vocês tém me ajudado bastante em todos as dúvidas, pois todas as vezes que precisei fui atendido prontamente.
O meu sistema já tém até bastante PRG'S, sendo assim quando vou compila-lo ele está demorando muito para terminar a compilação, sendo que muitas vezes mudo o código apenas de um PRG, e ele compila todos os PRG'S inclusive os que não sofreram alterações, então eu pergunto, existe um jeito de compilar somente as alterações?
Observação-> Eu utilizo um BAT e um arquivo LNK, abaixos descritos.

**********A.BAT************

clipper MENU
@if errorlevel 1 goto end:
clipper FUNCAO
@if errorlevel 1 goto end:
clipper INDEXA
@if errorlevel 1 goto end:
clipper SENHA
@if errorlevel 1 goto end:
clipper DBEDITS
@if errorlevel 1 goto end:
clipper LIBERACA
@if errorlevel 1 goto end:
clipper EMPRESA
@if errorlevel 1 goto end:
clipper CLIENTES
@if errorlevel 1 goto end:
clipper FORNECED
@if errorlevel 1 goto end:
clipper ITENS
@if errorlevel 1 goto end:
clipper CIDADES
@if errorlevel 1 goto end:
clipper FUNCIONA
@if errorlevel 1 goto end:
clipper GRUPOS
@if errorlevel 1 goto end:
clipper TRANSPOR
@if errorlevel 1 goto end:
clipper NATUREZA
@if errorlevel 1 goto end:
clipper SITUACAO
@if errorlevel 1 goto end:
clipper OBSERVAC
@if errorlevel 1 goto end:
clipper VETERINA
@if errorlevel 1 goto end:
clipper GRUPOCON
@if errorlevel 1 goto end:
#clipper TIPOBAIX
#@if errorlevel 1 goto end:
clipper BANCOS
@if errorlevel 1 goto end:
clipper VENDAS
@if errorlevel 1 goto end:
clipper NF
@if errorlevel 1 goto end:
clipper COMPRAS
@if errorlevel 1 goto end:
clipper PRODUTOS
@if errorlevel 1 goto end:
clipper MOVICLI1
@if errorlevel 1 goto end:
clipper MOVICLI2
@if errorlevel 1 goto end:
clipper MOVICLI3
@if errorlevel 1 goto end:
clipper MOVICLI4
@if errorlevel 1 goto end:
clipper MOVICLI5
@if errorlevel 1 goto end:
clipper MOVICLI6
@if errorlevel 1 goto end:
clipper RELCLI1
@if errorlevel 1 goto end:
clipper NFPEDIDO
@if errorlevel 1 goto end:
clipper ESTORNO
@if errorlevel 1 goto end:
clipper ORCAMENT
@if errorlevel 1 goto end:
clipper CONTASAP
@if errorlevel 1 goto end:
clipper CONTASAR
@if errorlevel 1 goto end:
clipper IMPRESSO
@if errorlevel 1 goto end:

C:\CLIPPER5\BLINKER\BIN\BLINKER @AOII

MENU.EXE

:END


********** AOII.LNK ******************

NOBELL
BLI EXECUTABLE DUAL
BLI CLIPPER PAGE OFF
BLI OVERLAY THRESHOLD 256
BLI CACHE EMS 50%,1024
BLI OVERLAY PAGEFRAME ON
BLI OVERLAY FIXED
BLI OVERLAY UMB OFF
BLI OVERLAY OPSIZE 60
BLI EXE COMPRESS 5
BLI INCREMENTAL OFF
BLI EXE CLIPPER F:250
BLI EXE IPX 48
BLI EXECUTABLE EXTEND
BLI EXTMEM BLOCK 2048
BLI PROCEDURE DEPTH 140
BLI EXECUTABLE NODELETE


FI MENU
FI FUNCAO
FI INDEXA
FI SENHA
FI DBEDITS
FI LIBERACA
FI EMPRESA
FI CLIENTES
FI FORNECED
FI ITENS
FI CIDADES
FI FUNCIONA
FI GRUPOS
FI TRANSPOR
FI NATUREZA
FI SITUACAO
FI OBSERVAC
FI VETERINA
FI GRUPOCON
FI BANCOS
FI VENDAS
FI NF
FI COMPRAS
FI PRODUTOS
FI MOVICLI1
FI MOVICLI2
FI MOVICLI3
FI MOVICLI4
FI MOVICLI5
FI MOVICLI6
FI RELCLI1
FI NFPEDIDO
FI ESTORNO
FI ORCAMENT
FI CONTASAP
FI CONTASAR
FI IMPRESSO

# OBJS

FI CTUSP
FI __WAIT_B
FI TIMESLIC

# Bibliotecas a serem utilizados

SEARCH BLXCLP52
LIB VL2_52
LIB SIX2
LIB CLIPPER
LIB EXTEND
LIB OSLIB
LIB CLIPON
LIB CTP
LIB Relogio
LIB EDBF

#Executavel

Out MENU

Senhores estes são meus arquivos que utilizo para Compilar e Linkar meu sistema, conto com ajuda de vocês.
Abraços,
Marcos
Da Roça.
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Marcos a galera anda falando do rmake verifique os post no fórum sobre ele tb visite o link dicas do site do toledo la tb fala ok.


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Olá,

Cara, utiliza o RMAKE. É moleza usá-lo. Ele compila somente o PRG que sofreu alteração.

Veja aqui como usá-lo:
http://www.htmlstaff.org/clipper/clipper34.php
Janio
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Tentando...

Mensagem por Marcos »

Queria agradecer ao Janio e ao Dudu, aproveitando a oportunidade ontém tive o prazer de falar pelo MSN com o Dudu, obrigado por me antender e me sugerir o RMAKE assim como o Janio também sugeriu eu visitei a matéria sobre o RMAKE, escrevi o código de acordo com meu programa, mas não deu certo, primeiro eu escrevi os códigos com todos os meus PRG'S, depois tirei e deixei somente o MENU.PRG que é o PRG principal e quando executo o bat que chama o arquivo dá o seguinte erro: "MENU.RMK(14) Fatal RMAKE/R3012 Sintax error: 'Blinker'" e não gera o EXE, o exemplo que estava na matéria deu o mesmo erro, então tinha em meu computador um exemplo que uma amigo do fórum mandou pra mim a tempos atrás quando eu já havia tentado usar o RMAKE sem sucesso e também deu o mesmo erro, desculpe não citar o nome do colega que passou os exemplos pra mim, pois não me lembro mais que foi, perdoe-me. Abaixo está a forma que tentei:
*** C.BAT ***
CLS
RMAKE MENU.RMK
if not errorlevel 1 MENU.EXE
*** MENU.RMK ***
.prg.obj:
Call Clipper $< /m /b $(PARTXT)
MENU.OBJ : MENU.PRG
.PRG.OBJ:
CALL CLIPPER $< /M /N /Q /V /B $(PARTXT)
MENU.EXE : MENU.OBJ
CALL BLINKER @MENU.LNK $(PARTXT)
*** MENU.LNK ***
Blinker Lowmem Reserve 64
Blinker Incremental Off
Blinker Executable Extended
Blinker Executable Nodelete
Blinker Executable Compress 9
Blinker Overlay PageFrame on
Stack 7068
OUTPUT MENU.EXE
File MENU
Library c:\clipper\lib\vl2_52
Library c:\catools\lib\ctp
Library c:\catools\lib\six2
Library c:\catools\lib\oslib
Library c:\catools\lib\samples
Search c:\CLIPPER5\blinker\lib\blxclp52


Bom assim estão os arquivos que contém o erro.
Marcos
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Marcos,

Dê uma olhada neste post https://pctoledo.org/forum/viewtopic.php?t=671

Observação:
Coloque o RMK e LNK da maneira como lá está que dá certo.
No seu BAT coloque somente : RMAKE MENU

Janio
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Como Compilar somente Alterações?

Mensagem por Maligno »

Marcos escreveu:estes são meus arquivos que utilizo para Compilar e Linkar meu sistema, conto com ajuda de vocês.
Eu não uso o RMAKE. Nunca gostei muito dele. Sempre preferi o MAKE da Borland, que me parece ser mais rápido (tenho esta impressão). Este utilitário é de uso muito simples, assim como o RMAKE.
O problema maior que percebi, quando vi sua mensagem, foi a forma como você (e a maioria que usa esse sistema de compilação) informa seus arquivos. Por isso, tomei a liberdade de pegar seus dados e compor dois arquivos de scripts para o MAKE e o BLinker. E antes que pergunte: não sei se a sintaxe de script do MAKE é compatível com a sintaxe do RMAKE, e vice-e-versa.
Eis o script do MAKE:

Código: Selecionar todos

menu.exe:       bancos.obj   \
                cidades.obj  \
                clientes.obj \
                compras.obj  \
                contasap.obj \
                contasar.obj \
                dbedits.obj  \
                empresa.obj  \
                estorno.obj  \
                forneced.obj \
                funcao.obj   \
                funciona.obj \
                grupocon.obj \
                grupos.obj   \
                impresso.obj \
                indexa.obj   \
                itens.obj    \
                liberaca.obj \
                menu.obj     \
                movicli1.obj \
                movicli2.obj \
                movicli3.obj \
                movicli4.obj \
                movicli5.obj \
                movicli6.obj \
                natureza.obj \
                nf.obj       \
                nfpedido.obj \
                observac.obj \
                orcament.obj \
                produtos.obj \
                relcli1.obj  \
                senha.obj    \
                situacao.obj \
                tipobaix.obj \
                transpor.obj \
                vendas.obj   \
                veterina.obj 

 cls
 blinker @prg.lnk

.prg.obj:
 cls
 echo *******************************************************************************
 echo Clipper $& $(OPT) -d$(COMP)
 clipper $& $(OPT) -d$(COMP)

$&.obj:  $&.prg
Repare que você só precisa mencionar o nome do arquivo uma única vez. Isso facilita bastante a manutenção, principalmente quando há um grande volume de arquivos.
Repare que os switches de compilação do Clipper não estão presentes. Assim como o RMAKE, o MAKE permite a você informar esses switches por meio de um programa à parte, normalmente um batch. Fica mais prático para você compilar para teste ou para a entrega final do programa para o cliente. Ao invés de ter que alterar o script, você simplesmente chama o batch com os switches na linha de comando. Por exemplo: "comp_menu /n/l". Logicamente o batch tem que estar preparado para fazer a substituição. Mas eu prefiro ter dois batches. Eu uso o UltraEdit32 para edição e já tenho configuradas duas teclas distintas para cada caso de compilação. Assim, preciso de dois batches.
Exemplo de batch que eu uso:

Código: Selecionar todos

@cls
make -fmenu -l+ -s -DOPT=/m/n/l -DCOMP=FINAL
@del *.obj
@echo .
@echo *******************************************************************************
@choice /C:ABCDEFGHIJKLMNOPQRSTUVWXYZ /N /T:X,10 SUCCESS! 
Seria aconselhável você ler o help do Make (tenho o Make disponível na minha página) para conhecer melhor sua configuração. É só digitar make /h., mas é basicamente:

Código: Selecionar todos

-f   ->   indica o arquivo de script
-l+  ->   em XP pode existir um erro de falta de espaço.
          Esse switch previne esse problema.
-s   ->   silent. Instrui o Make a não imprimir os comandos
-D   ->   passa para a frete um símbolo. Veja que eu usei
          dois: OPT=/m/n/l e COMP=FINAL. Esse último indica que
          eu quero um EXE para entrega ao cliente. Tenho também
          um outro (TESTE), que é lido no Clipper pelos comandos
          de pré-processamento, incluindo ou excluindo partes do
          código, conforme o caso.
Esse comando CHOICE é um programa (se quiser, posso enviar) que tem uma função especial: se estou compilando uma quantidade muito grande de fontes, um pode apresentar erro. Assim que isso acontece o Make encerra e pára de processar o script. Como eu uso um editor no Windows, quando compilo e tenho um erro, sem o CHOICE a janela do DOS se fecharia e eu não veria em qual fonte está o erro, muito menos qual erro. O CHOICE dá uma paradinha e espera que eu pressione uma tecla. Isso ajuda muito. Aliás, aquela linha de asteriscos no script do Make é apenas para "enfeitar" a tela. Sem ela, os dados que vão aparecendo ficariam amontoados e não daria para perceber muita coisa. O CLS também é para isso.

Se você preferir aceitar minha sugestão, use dois batches com os nomes: MENU-T para teste e MENU-F para compilação final, por exemplo.

Agora, o script do BLinker:

Código: Selecionar todos

nobell
output menu
map=menu s,a


file menu
file bancos
file cidades
file clientes
file compras
file contasap
file contasar
file dbedits
file empresa
file estorno
file forneced
file funcao
file funciona
file grupocon
file grupos
file impresso
file indexa
file itens
file liberaca
file movicli1
file movicli2
file movicli3
file movicli4
file movicli5
file movicli6
file natureza
file nf
file nfpedido
file observac
file orcament
file produtos
file relcli1
file senha
file situacao
file transpor
file vendas
file veterina
#
file ctusp
file __wait_b
file timeslic


lib blxclp52
lib vl2_52
lib six2
lib clipper
lib extend
lib oslib
lib clipon
lib ctp
lib relogio
lib edbf


blinker executable dual          # aumenta +/- 70% o tamanho do EXE. Cuidado!
blinker clipper page off         # precisa?
blinker overlay threshold 256    # precisa?
blinker cache ems 50%,1024       # precisa?
blinker overlay pageframe on     # no modo extend não faz efeito.
blinker overlay fixed            # no modo extend não faz efeito.
blinker overlay umb off          # no modo extend não faz efeito.
blinker overlay opsize 60        # no modo extend não faz efeito.
blinker executable compress 5    # normalmente se usa ou 1 (máximo) ou 9 (mínimo)
blinker incremental off          # 
blinker executable clipper f:250 # 
blinker executable ipx 48        # precisa?
blinker executable extend        # se já usa dual, porquê extend? Remova um deles.
blinker extmem block 2048        # precisa?
blinker procedure depth 140      # precisa? Nunca conheci ninguém que precisasse.
blinker executable nodelete      # cuidado! Fique de olho mas mensagens do BLinker
Acho que neste caso também ficou mais claro e fácil de entender. Inclusive, procure manter seus arquivos em ordem alfabética. Fica mais fácil para encontrar alguma coisa. A não ser claro, o fonte principal, que no script do BLinker precisa ser o primeiro a aparecer. Mais ou menos como eu fiz com os seus fontes.

Fiz algumas ressalvas na parametrização do BLinker quanto à montagem do executável. O que de pior vi é o uso do modo DUAL. Ele aumenta demais o tamanho do executável. Mas, como hoje em dia as máquinas têm sempre muita memória, meu conselho é que você use o modo EXTENDED. A não ser, claro, que seus programas ainda rodem em máquinas muito antigas. Suas LIBs, pelo que vi, parecem estar preparadas para o modo protegido. Acho que você não terá problemas. A não ser, talvez, no caso da lib RELOGIO. Já vi muita gente reclamando de GPF causada por ela. Mas, como você usa a CATools, aconselho você a removê-la e passar usar a função ShowTime(), que, pelo que sei, faz a mesma coisa.

É isso. Se quiser trocar mais algumas idéias a respeito, é só dizer. Espero ter conseguido mais ajudar do que complicar. E, lembre-se: o Make está disponível na minha página (tabela verde). Mas o CHOICE.COM você terá de me pedir, se é que já não tem.

[]'s
Maligno
http://www.buzinello.com/prg
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Opa mestre Maligno !!
Eu tb uso o make em programas clipper, soh uso o rmake no 5win...
Qdo uso o make eu crio um arquivo chamado makefile contendo todo o script para compilação... e soh digito make e ele faz tudo....eu uso make desde o antigo fórum qdo li sobre ele....e no final coloco prele executar o programa no final da compilação...tudo dentro do arquivo makefile...eh da hora...conforme citado....


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Dudu_XBase escreveu:Eu tb uso o make em programas clipper, soh uso o rmake no 5win...
É isso mesmo Dudu.
Inclusive, quem não usa esse tipo de ferramenta mas pretende migrar para xHarbour, é bom começar a se acostumar. Apesar do xHarbour ter o HBMake, que automatiza o processo de montagem dos scripts. Aliás, a idéia deles com esse programa foi boa, assim como a intenção. Mas quem for depender dele ficará preso a um programa que é muito ruim de usar e que gera um script difícil de manter. O ideal é ter controle da situação, começando então a aprender mais sobre o assunto e se tornando, assim, independente.

[]'s
Maligno
http://www.buzinello.com/prg
gransoft
Usuário Nível 3
Usuário Nível 3
Mensagens: 321
Registrado em: 06 Jul 2004 17:48
Localização: UBERLÂNDIA-MG
Contato:

HBmake

Mensagem por gransoft »

ARAGUARI-MG, 19 de setembro de 2004.

Prezados Srs.,

Analisando o POST do Malígno, cheguei à conclusão de que EU NÃO estou louco e nem criando caso à toa...

Existe realmente algo de "muito chato" no HBMAKE do xHarbour !

E, conforme postei anteriormente, o Clippeiro que teve que fragmentar o Aplicativo em Clipper5.2E para solucionar o erro "string exausta", terá dificuldades em "encadear" os *.prgs quando migrar para xHarbour.

Atenciosamente,
Janis Peters Grants.

http://www.gransoft.com.br
gransoft@zipmail.com.br
Editado pela última vez por gransoft em 20 Set 2004 17:37, em um total de 1 vez.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: HBmake

Mensagem por Maligno »

gransoft escreveu:Existe realmente algo de "muito chato" no HBMAKE do xHarbour !
Sinceramente acho que "chato" é um adjetivo modesto para o HBMake. Na minha opinião ele é imprestável. Fui fazer alguns testes e, da coisa mal feita como é, desisti de usá-lo. Acabei fazendo no braço mesmo.

Mas quero que fique claro que acho que o pessoal do xHarbour não teve só uma boa idéia com este programa, mas também uma boa intenção.
Mas não deu. Ficou realmente uma porcaria, que mais complica do que explica. E eu sinto muito por isso. Não por mim, porquê eu não perco mais que alguns minutos com esse contra-tempo. Eu sinto mesmo pelo novato que está começando e, de cara, já se depara com essa dificuldade.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Obrigado.

Mensagem por Marcos »

Maligno, obrigado pela sua ajuda, vou testar e depois retorno os resultados...
Marcos
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Extensão.

Mensagem por Marcos »

Maligno, vc poderia me informar qual a extensão que utilizo para criar o arquivo utilizando o MAKE?
Ex: Quando utilizo o RMAKE a extensão é MENU.RMK.
Marcos
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

a Extensão é MAK


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Erro já.

Mensagem por Marcos »

Maligno eu acho que estou escrevendo o arquivo BAT errado, eu copiei exatamente como vc me passou e está dando os seguintes erros:
Error menu.mak 20: command sintax error
Error menu.mak 22: command sintax error
Error menu.mak 23: command sintax error
Error menu.mak 24: command sintax error
Error menu.mak 25: command sintax error
Error menu.mak 26: command sintax error
*** 6 error durink make ***
Arquivo não encontrado.
ECHO está desativado
ECHO está desativado

Agora veja como eu fiz após pegar o MAKE na sua pagina:
*** M.BAT ***
@cls
make -fmenu -l+ -s -DOPT=/m/n/l -DCOMP=FINAL
@del *.obj
@echo
@echo
*** MENU.MAK ***
menu.exe: FUNCAO.OBJ \
INDEXA.OBJ \
SENHA.OBJ \
DBEDITS.OBJ \
LIBERACA.OBJ \
EMPRESA.OBJ \
CLIENTES.OBJ \
FORNECED.OBJ \
ITENS.OBJ \
CIDADES.OBJ \
FUNCIONA.OBJ \
GRUPOS.OBJ \
TRANSPOR.OBJ \
NATUREZA.OBJ \
SITUACAO.OBJ \
OBSERVAC.OBJ \
VETERINA.OBJ \
cls
blinker @prg.lnk
.prg.obj:
cls
echo
echo Clipper $& $(OPT) -d$(COMP)
Clipper $& $(OPT) -d$(COMP)
*** MENU.LNK ***
nobell
output menu
map=menu s, a
FI MENU
FI FUNCAO
FI INDEXA
FI SENHA
FI DBEDITS
FI LIBERACA
FI EMPRESA
FI CLIENTES
FI FORNECED
FI ITENS
FI CIDADES
FI FUNCIONA
FI GRUPOS
FI TRANSPOR
FI NATUREZA
FI SITUACAO
FI OBSERVAC
FI VETERINA
#
FI MSG
FI CTUSP
FI __WAIT_B
FI TIMESLIC

LIB SEARCH BLXCLP52
LIB VL2_52
LIB SIX2
LIB CLIPPER
LIB EXTEND
LIB OSLIB
LIB CLIPON
LIB CTP
LIB Relogio
LIB EDBF


BLI EXECUTABLE DUAL
BLI CLIPPER PAGE OFF
BLI OVERLAY THRESHOLD 256
BLI CACHE EMS 50%,1024
BLI OVERLAY PAGEFRAME ON
BLI OVERLAY FIXED
BLI OVERLAY UMB OFF
BLI OVERLAY OPSIZE 60
BLI EXE COMPRESS 5
BLI INCREMENTAL OFF
#BLI CACHE XMS 50%,1024
BLI EXE CLIPPER F:250
BLI EXE IPX 48
# BLI EXE REAL # RODANDO EM MEMORIA CONVENCIONAL
BLI EXECUTABLE EXTEND # RODANDO EM MEMORIA ALTA
BLI EXTMEM BLOCK 2048
BLI PROCEDURE DEPTH 140
BLI EXECUTABLE NODELETE

Poderia me ajudar mais uma vez?
Marcos
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Maligno eu acho que estou escrevendo o arquivo BAT errado, eu copiei exatamente como vc me passou e está dando os seguintes erros:

Código: Selecionar todos

Error menu.mak 20: command sintax error
Error menu.mak 22: command sintax error
Error menu.mak 23: command sintax error
Error menu.mak 24: command sintax error
Error menu.mak 25: command sintax error
Error menu.mak 26: command sintax error
*** 6 error durink make ***
Arquivo não encontrado.
ECHO está desativado
ECHO está desativado

*** M.BAT ***
@cls
make -fmenu -l+ -s -DOPT=/m/n/l -DCOMP=FINAL
@del *.obj
@echo
@echo
As duas últimas linhas "@ECHO" apenas vão dizer qual a situação do ECHO, ou seja: desativado. Não é um erro. E eu coloquei no meu batch, após o primeiro ECHO, um ponto (para separação apenas) e após o segundo, um monte de asteriscos. Como essas duas linhas tem efeito cosmético, você pode removê-las se quiser.
Note também que eu lhe dei o meu batch para compilação FINAL. Assim, a função da linha "@del *.obj é apagar esses objetos. Apenas como lembrança: se for sua compilação de TESTE, apague ou comente essa linha.

Código: Selecionar todos

*** MENU.MAK ***
menu.exe: FUNCAO.OBJ   \
          INDEXA.OBJ   \
          SENHA.OBJ    \
          DBEDITS.OBJ  \
          LIBERACA.OBJ \
          EMPRESA.OBJ  \
          CLIENTES.OBJ \
          FORNECED.OBJ \
          ITENS.OBJ    \
          CIDADES.OBJ  \
          FUNCIONA.OBJ \
          GRUPOS.OBJ   \
          TRANSPOR.OBJ \
          NATUREZA.OBJ \
          SITUACAO.OBJ \
          OBSERVAC.OBJ \
          VETERINA.OBJ \
cls
blinker @prg.lnk
.prg.obj:
cls
echo
echo Clipper $& $(OPT) -d$(COMP)
Clipper $& $(OPT) -d$(COMP)
Você não copiou corretamente. A contra-barra serve para o Make saber que a presente linha tem uma continuação. Assim, como VETERINA.OBJ é a última linha da regra, remova a contra-barra após seu nome. Ela está confundindo o Make, e provavelmente é a culpada pelos seis erros.

Agora, com relação ao seu LNK, apesar de você ainda não ter "passado" pelo Make sem erros,...

Código: Selecionar todos

LIB SEARCH BLXCLP52
LIB VL2_52
LIB SIX2
LIB CLIPPER
LIB EXTEND
LIB OSLIB
LIB CLIPON
LIB CTP
LIB Relogio
LIB EDBF

BLI EXECUTABLE DUAL
BLI CLIPPER PAGE OFF
BLI OVERLAY THRESHOLD 256
BLI CACHE EMS 50%,1024
BLI OVERLAY PAGEFRAME ON
BLI OVERLAY FIXED
BLI OVERLAY UMB OFF
BLI OVERLAY OPSIZE 60
BLI EXE COMPRESS 5
BLI INCREMENTAL OFF
#BLI CACHE XMS 50%,1024
BLI EXE CLIPPER F:250
BLI EXE IPX 48
# BLI EXE REAL # RODANDO EM MEMORIA CONVENCIONAL
BLI EXECUTABLE EXTEND # RODANDO EM MEMORIA ALTA
BLI EXTMEM BLOCK 2048
BLI PROCEDURE DEPTH 140
BLI EXECUTABLE NODELETE
Note que LIB SEARCH BLXCLP52 está sintaticamente errado. Ou é LIB ou é SEARCH. E os dois comandos se equivalem. A diferença é sutil. Exemplo: você faz diversas referências à funções em seu programa. As LIBs deverão ser pesquisadas, a fim de que se resolvam as referências classificadas como externas. Supondo que você tem 5 LIBs no seu script. O BLinker procurará em todas, na ordem de aparecimento no script. Se, ao chegar na última LIB, alguma referência ainda não tiver sido resolvida, o BLinker iniciará a busca de novo, a partir da primeira. Acho isso uma bobagem. Se já pesquisou, vai procurar de novo pra quê? Nunca tive uma resposta verossímel e fundamentada. Mas isso é o de menos por enquanto.
O comando SEARCH faz a mesma coisa, mas a cada busca em cada LIB, todos os símbolos das LIBs são mantidos em RAM, consumindo espaço e tomando mais tempo de processamento. A idéia por trás disso é: se não encontrou na primeira passada, vai procurar de novo, mas em RAM. Ficará mais rápido do que pesquisar arquivo por arquivo de novo. Isso é verdade. Mas, um erro de "unresolved external" é um evento muito mais raro do que o sucesso nesta busca. Assim, mais se perde tempo do que se ganha. E ainda corre-se o risco de ter algum estouro de memória. E é como eu disse antes: se não encontrou na primeira passada, decerto não encontrará na segunda. Ou terceira, quarta, etc... Portanto, use LIB ao invés de SEARCH. Vai economizar seu tempo e sua memória.
Aliás, veja o que o help diz sobre o uso de SEARCH:
Use of the SEARCH command should be limited to those cases where it is required, as it slows the linking process, and uses large amounts of memory at link time.
Mais:
As LIBs CLIPPER e EXTEND, que você mencionou no script, são pesquisadas por default. Você não precisa incluí-las no script. Isso porquê cada objeto criado pelo Clipper tem embutidas referências às LIBs básicas do Clipper, das quais o objeto precisa. De fato, alguns compiladores fazem isso mesmo. Então, você perde seu tempo incluindo-as no script. Elas serão pesquisadas de qualquer forma, uma vez que essa instrução de busca já está no objeto. A não ser que você use o comando NODEFLIB, que instrui o BLinker a não pesquisar as LIBs referenciadas dentro dos objetos. Mas não existe nenhum bom motivo para você usar esse comando.

Mais:
Se você vai montar seu programa para o modo protegido, esqueça tudo o que se refere ao comando OVERLAY. No modo protegido ele não faz mais sentido, uma vez que o programa todo vai residir em RAM alta (extendida). Ou seja, remova os comandos que contém BLI OVERLAY e os tais BLI CACHE... , que só fazem o cacheamento de overlay. Até porquê, os comandos que instruem o uso de overlay, neste seu script, também não fazem sentido porquê você não definiu qualquer área de overlay. Todos os seus objetos, na forma como estão definidos, mesmo que fossem para o uso do modo real (só neste modo overlay faz sentido), residirão na raiz do programa. Então,...

Mais:
Decida. Modo real, dual ou extendido? Use um só. E lembre-se do que eu disse sobre o modo DUAL: aumenta seu executável em +/- 70%. E nem compensa muito, uma vez que a maioria das máquinas hoje dão plenas condições memória para o uso do modo protegido.

Mais:
E o mais importante, aliás. Perca um tempinho lendo o help do BLinker. Investigue os comandos que você está usando no seu script. Você vai encontrar uma literatura bem interessante e muito útil. E claro, vai conhecer as várias opções que o linker oferece. Não só o que diz respeito à montagem, mas também ao uso de algumas de suas funções.

[]'s
Maligno
http://www.buzinello.com/prg
Responder