FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Makefile. Error en C.
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Makefile. Error en C.
Posted: Mon Apr 07, 2008 09:25 AM

Tengo un Makefile que contiene muchos prgs, no voy ni por la mitad, y me
encuentro que el Borland C se queja, aqui dejo como lo monto;

APP_PRG_LIST = \
server.prg \
total_115.prg \

Implicit Rules

.prg.hrb:
$(HARBOUR_EXE) $(HARBOUR_FLAGS) $** -o$@

.hrb.o32:
$(BORLANDC_COMP_EXE) $(BORLANDC_COMP_FLAGS) -o$@ $**

$(APP_RES) : $(APP_RC)
$(BORLANDC_RES_EXE) -r $**

$(APP_EXE) :: $(APP_RES)
@if exist $(APP_EXE) del $(APP_EXE) > nul

$(APP_EXE) :: $(APP_OBJS)
@echo $(STARTUP_OBJ) + > make.tmp
@echo $(**) , + >> make.tmp

Como se puede observar $(**) se sustituyen por todos los prg, pero en el 115 el compilador suelta;

C:>make
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
Fatal: Command arguments too long

Si quito cualquier prg de las lista, entonces compila bien.

驴 Alquien puede decirme como solucionarlo ? Gracias.

Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Makefile. Error en C.
Posted: Mon Apr 07, 2008 10:50 AM

Rafa,

En FWH\makes\bormake.zip tienes un ejemplo completo, operativo y simple :-) de un make en Borland.

Tambien tienes otro, en esa misma carpeta, para Microsoft.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Makefile. Error en C.
Posted: Mon Apr 07, 2008 11:35 AM
Antonio Linares wrote:Rafa,

En FWH\makes\bormake.zip tienes un ejemplo completo, operativo y simple :-) de un make en Borland.

Tambien tienes otro, en esa misma carpeta, para Microsoft.


No, si asi estaba, lo que pasa es que tengo que poner por cada .prg un .obj.
Del modo que te digo, no es necesario, solamente poniendo el .prg, ya esta.
Haber si consigo averiguar que puede ser.
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Makefile. Error en C.
Posted: Mon Apr 07, 2008 02:36 PM

Rafa,

En el make que proporcionamos en FWH\makes\Bormake.zip no tienes que especificar el nombre de los OBJs ya que esta instrucci贸n se encarga de reutilizar la lista de nombres de los ficheros:

$(PRG:.PRG=.OBJ) $(C:.C=.OBJ)

Significa:
En la lista PRG reemplaza .PRG con .OBJ.
Y en la lista C reemplaza .C con .OBJ

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Makefile. Error en C.
Posted: Mon Apr 07, 2008 04:04 PM
Hola Rafa,

thefull wrote:
No, si asi estaba, lo que pasa es que tengo que poner por cada .prg un .obj.
Del modo que te digo, no es necesario, solamente poniendo el .prg, ya esta.
Haber si consigo averiguar que puede ser.


Eso es porque el buffer del shellexecute o lo que use el make para ejecutar el "echo" no es lo suficientemente grande como para aguantar la linea tan grande.

Una chapucilla: si estas metiendo los .OBJs en el directorio .\obj, cambia el nomber del directorio a .\o, con 2 caracteres menos por archivo te ahorras algo

Algo parecido me pasaba con el rmake del clipper tratando de armar rmks para harbour.

Un saludo,

Carlos.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
鈥淚f you think education is expensive, try ignorance"
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Makefile. Error en C.
Posted: Mon Apr 07, 2008 04:34 PM
Hombre Carlos, cuanto tiempo!!
Si tienes raz贸n, pero el amigo Migueal Angel Marchuet me a pasado la soluci贸n, y chuta de pelotas;

Esto es lo que tenia;
$(APP_EXE) :: $(APP_OBJS)
   @echo $(STARTUP_OBJ) + > make.tmp
   @echo $(**) , + >> make.tmp
   @echo $(APP_EXE), + >> make.tmp
   @echo $(APP_MAP), + >> make.tmp
   @echo $( FIVE_FIVEXH ) + >> make.tmp
   @echo $( FIVE_FIVEHC ) + >> make.tmp
   @echo $( RTL_LIB ) + >> make.tmp
   @echo $( VM_LIB )  + >> make.tmp
   @echo $( GTWIN_LIB ) + >> make.tmp
   @echo $( LANG_LIB ) + >> make.tmp
   @echo $( MACRO_LIB ) + >> make.tmp
   @echo $( RDD_LIB ) + >> make.tmp
   @echo $( DBFNTX_LIB ) + >> make.tmp
   @echo $( HBSIX_LIB) + >> make.tmp
   @echo $( DBFCDX_LIB ) + >> make.tmp
   @echo $( FPT_LIB ) + >> make.tmp
   @echo $( COMMON_LIB ) + >> make.tmp
   @echo $( PCREPOS_LIB ) + >> make.tmp
   @echo $( PP_LIB ) + >> make.tmp
   @echo $( CT_LIB ) + >> make.tmp
   @echo $( DEBUG_LIB ) + >> make.tmp
   @echo $( CW32_LIB ) + >> make.tmp
   @echo $( IMPORT32_LIB ) + >> make.tmp
   @echo $(BORLANDC_LIB_DIR)\psdk\msimg32.lib + >> make.tmp
   @echo ,,$(APP_RES) >> make.tmp
   $(BORLANDC_LINK_EXE) $(BORLANDC_LINK_FLAGS) @make.tmp


Pues lo transforme seg煤n un ejemplo que me envi贸 Miguel en ;

$(APP_EXE) :: $(APP_OBJS)
   $(BORLANDC_LINK_EXE) $(BORLANDC_LINK_FLAGS) @&&|
   $(STARTUP_OBJ) +
   $(APP_OBJS_LINK), +
   $(APP_EXE), +
   $(APP_MAP), +
   $( FIVE_FIVEXH ) +
   $( FIVE_FIVEHC ) +
   $( RTL_LIB ) +
   $( VM_LIB )  +
   $( GTWIN_LIB ) +
   $( LANG_LIB ) +
   $( MACRO_LIB ) +
   $( RDD_LIB ) +
   $( DBFNTX_LIB ) +
   $( HBSIX_LIB) +
   $( DBFCDX_LIB ) +
   $( FPT_LIB ) +
   $( PCREPOS_LIB ) +
   $( COMMON_LIB ) +
   $( PP_LIB ) +
   $( CT_LIB ) +
   $( DEBUG_LIB ) +
   $( CW32_LIB ) +
   $( IMPORT32_LIB ) +
   $(BORLANDC_LIB_DIR)\psdk\msimg32.lib , +
   ,$(APP_RES)
| /OUT:$(APP_EXE)


De esta manera solamente teniendo la definicion del .prg, no tengo que duplicar el OBJ.

Espero te sea de utilidad.
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Makefile. Error en C.
Posted: Mon Apr 07, 2008 04:37 PM
Antonio Linares wrote:Rafa,

En el make que proporcionamos en FWH\makes\Bormake.zip no tienes que especificar el nombre de los OBJs ya que esta instrucci贸n se encarga de reutilizar la lista de nombres de los ficheros:

$(PRG:.PRG=.OBJ) $(C:.C=.OBJ)

Significa:
En la lista PRG reemplaza .PRG con .OBJ.
Y en la lista C reemplaza .C con .OBJ


Antonio, por lo que veo;
PRG =        \
    alert.PRG    \
    one.PRG


Alert.exe  : $(PRG:.PRG=.OBJ) $(C:.C=.OBJ) Alert.res
   echo off
   echo $(BCDIR)\lib\c0w32.obj + > b32.bc
   [b]echo obj\alert.obj obj\one.obj obj\two.obj, + >> b32.bc[/b]
   echo alert.exe, + >> b32.bc
   echo alert.map, + >> b32.bc


Estas definiendo los .PRGs y en el echo los objs, por lo que entiendo
que si tengo 200 prgs, tengo que definir los 200 objs.
Seg煤n el make que te pongo, solamente se definen los .prgs.
Es m谩s, esto, a partir de 115, es cuando falla.
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Makefile. Error en C.
Posted: Mon Apr 07, 2008 04:44 PM

Rafa,

La l铆nea

echo obj\alert.obj obj\one.obj obj\two.obj, + >> b32.bc

habr铆a que reemplazarla con:

echo $(PRG:.PRG=.OBJ) $(C:.C=.OBJ), + >> b32.bc

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM
Makefile. Error en C.
Posted: Tue Apr 08, 2008 08:35 AM
Antonio Linares wrote:Rafa,

La l铆nea

echo obj\alert.obj obj\one.obj obj\two.obj, + >> b32.bc

habr铆a que reemplazarla con:

echo $(PRG:.PRG=.OBJ) $(C:.C=.OBJ), + >> b32.bc


Lo probar茅, pero me da toda la pinta que cascar谩 cuando tengas muchos
obj para pasarle a la linea de comandos.

Gracias.
Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)

Continue the discussion