Page 1 of 1

Makefile. Error en C.

PostPosted: Mon Apr 07, 2008 9:25 am
by thefull
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.

PostPosted: Mon Apr 07, 2008 10:50 am
by Antonio Linares
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.

PostPosted: Mon Apr 07, 2008 11:35 am
by thefull
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.

PostPosted: Mon Apr 07, 2008 2:36 pm
by Antonio Linares
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

PostPosted: Mon Apr 07, 2008 4:04 pm
by Carlos Mora
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.

PostPosted: Mon Apr 07, 2008 4:34 pm
by thefull
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
$(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
$(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.

PostPosted: Mon Apr 07, 2008 4:37 pm
by thefull
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
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.

PostPosted: Mon Apr 07, 2008 4:44 pm
by Antonio Linares
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

PostPosted: Tue Apr 08, 2008 8:35 am
by thefull
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.