Makefile. Error en C.

Makefile. Error en C.

Postby thefull » Mon Apr 07, 2008 9: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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42159
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby thefull » 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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Antonio Linares » Mon Apr 07, 2008 2: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42159
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Carlos Mora » Mon Apr 07, 2008 4: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.
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby thefull » Mon Apr 07, 2008 4: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;
Code: Select all  Expand view  RUN
$(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 ;

Code: Select all  Expand view  RUN
$(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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby thefull » Mon Apr 07, 2008 4: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;
Code: Select all  Expand view  RUN
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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Postby Antonio Linares » Mon Apr 07, 2008 4: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42159
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby thefull » Tue Apr 08, 2008 8: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__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Antonio Linares, Google [Bot] and 54 guests