Page 2 of 3

Re: Archivo de compilacion .mak para Visual Studio

Posted: Sun Jan 19, 2025 7:48 pm
by Antonio Linares
A ver si ahora:

Code: Select all | Expand

# Microsoft VS2022 make sample, (c) FiveTech Software 2022
# Rutas de herramientas y librerías
HBDIR=c:\harbour_msvc
FWDIR=c:\fwh
VCDIR=c:\vc2022\bin32

.SUFFIXES: .prg .c .obj .rc .res

PRG = \
    prg\one.PRG \
    prg\two.PRG \
    prg\three.PRG

OBJ=$(PRG:.PRG=.obj)
OBJS=$(OBJ:prg\=obj\)

# Crear directorio obj si no existe
!IF ![if not exist obj mkdir obj]
!ENDIF

PROJECT: one.EXE

# Enlace final
one.exe : $(OBJS) one.res
    echo $(OBJS) > msvc.tmp
    @echo Vinculando...
    @echo $(FWDIR)\lib\FiveH32.lib $(FWDIR)\lib\FiveHC32.lib > msvc.tmp
    @echo $(HBDIR)\lib\win\msvc\hbrtl.lib >> msvc.tmp
    @echo $(HBDIR)\lib\win\msvc\hbvm.lib >> msvc.tmp
    @echo $(HBDIR)\lib\win\msvc\gtgui.lib >> msvc.tmp
    @echo $(HBDIR)\lib\win\msvc\hblang.lib >> msvc.tmp
    @echo $(HBDIR)\lib\win\msvc\hbmacro.lib >> msvc.tmp
    @echo $(HBDIR)\lib\win\msvc\hbrdd.lib >> msvc.tmp
    @echo $(HBDIR)\lib\win\msvc\rddntx.lib >> msvc.tmp
    @echo $(HBDIR)\lib\win\msvc\rddcdx.lib >> msvc.tmp
    @echo $(HBDIR)\lib\win\msvc\rddfpt.lib >> msvc.tmp
    @echo $(HBDIR)\lib\win\msvc\hbsix.lib >> msvc.tmp
    @echo kernel32.lib >> msvc.tmp
    @echo user32.lib >> msvc.tmp
    @echo gdi32.lib >> msvc.tmp
    @echo winspool.lib >> msvc.tmp
    @echo comctl32.lib >> msvc.tmp
    @echo comdlg32.lib >> msvc.tmp
    @echo advapi32.lib >> msvc.tmp
    @echo shell32.lib >> msvc.tmp
    @echo ole32.lib >> msvc.tmp
    @echo oleaut32.lib >> msvc.tmp
    @echo uuid.lib >> msvc.tmp
    @echo odbc32.lib >> msvc.tmp
    @echo odbccp32.lib >> msvc.tmp
    @echo iphlpapi.lib >> msvc.tmp
    @echo mpr.lib >> msvc.tmp
    @echo version.lib >> msvc.tmp
    @echo wsock32.lib >> msvc.tmp
    @echo msimg32.lib >> msvc.tmp
    @echo oledlg.lib >> msvc.tmp
    @echo psapi.lib >> msvc.tmp
    @echo gdiplus.lib >> msvc.tmp
    @echo winmm.lib >> msvc.tmp
    @echo ws2_32.lib >> msvc.tmp
    IF EXIST one.res echo one.res >> msvc.tmp
    $(VCDIR)\link @msvc.tmp /nologo /subsystem:windows /force:multiple > link.log
    @type link.log

one.res : one.rc
    $(VCDIR)\rc.exe -r -d__FLAT__ one.rc

# Regla explícita para construir obj\*.obj desde prg\*.prg
{prg\}.prg{obj\}.obj:
    $(HBDIR)\bin\harbour $< /n /w /o$@ /i$(FWDIR)\include;$(HBDIR)\include
    $(VCDIR)\cl.exe -TP -W3 -c /GS- /I$(HBDIR)\include /GA -Fo$@ $*.c

Re: Archivo de compilacion .mak para Visual Studio

Posted: Sun Jan 19, 2025 8:02 pm
by Compuin
Creo que vamos avanzando,

Code: Select all | Expand

obj\one.OBJ : fatal error LNK1107: invalid or corrupt file: cannot read at 0x588

Code: Select all | Expand

obj\one.OBJ obj\two.OBJ obj\three.OBJ 
c:\fwh\lib\FiveH32.lib c:\fwh\lib\FiveHC32.lib 
c:\harbour_msvc\lib\win\msvc\hbrtl.lib 
c:\harbour_msvc\lib\win\msvc\hbvm.lib 
c:\harbour_msvc\lib\win\msvc\gtgui.lib 
c:\harbour_msvc\lib\win\msvc\hblang.lib 
c:\harbour_msvc\lib\win\msvc\hbmacro.lib 
c:\harbour_msvc\lib\win\msvc\hbrdd.lib 
c:\harbour_msvc\lib\win\msvc\rddntx.lib 
c:\harbour_msvc\lib\win\msvc\rddcdx.lib 
c:\harbour_msvc\lib\win\msvc\rddfpt.lib 
c:\harbour_msvc\lib\win\msvc\hbsix.lib 
c:\harbour_msvc\lib\win\msvc\hbdebug.lib 
c:\harbour_msvc\lib\win\msvc\hbcommon.lib 
c:\harbour_msvc\lib\win\msvc\hbpp.lib 
c:\harbour_msvc\lib\win\msvc\hbwin.lib 
c:\harbour_msvc\lib\win\msvc\hbcplr.lib 
c:\harbour_msvc\lib\win\msvc\xhb.lib 
c:\harbour_msvc\lib\win\msvc\hbpcre.lib 
c:\harbour_msvc\lib\win\msvc\hbct.lib 
c:\harbour_msvc\lib\win\msvc\hbcpage.lib 
c:\harbour_msvc\lib\win\msvc\hbzlib.lib 
c:\harbour_msvc\lib\win\msvc\png.lib 
c:\harbour_msvc\lib\win\msvc\hbziparc.lib 
c:\harbour_msvc\lib\win\msvc\hbmzip.lib 
c:\harbour_msvc\lib\win\msvc\minizip.lib 
kernel32.lib 
user32.lib 
gdi32.lib 
winspool.lib 
comctl32.lib 
comdlg32.lib 
advapi32.lib 
shell32.lib 
ole32.lib 
oleaut32.lib 
uuid.lib 
odbc32.lib 
odbccp32.lib 
iphlpapi.lib 
mpr.lib 
version.lib 
wsock32.lib 
msimg32.lib 
oledlg.lib 
psapi.lib 
gdiplus.lib 
winmm.lib 
ws2_32.lib 
one.res 

Re: Archivo de compilacion .mak para Visual Studio

Posted: Sun Jan 19, 2025 10:29 pm
by Antonio Linares
Modifica esta línea:

@echo $(FWDIR)\lib\FiveH32.lib $(FWDIR)\lib\FiveHC32.lib > msvc.tmp

así:

@echo $(FWDIR)\lib\FiveH32.lib $(FWDIR)\lib\FiveHC32.lib >> msvc.tmp

Re: Archivo de compilacion .mak para Visual Studio

Posted: Sun Jan 19, 2025 10:32 pm
by Antonio Linares
> obj\one.OBJ : fatal error LNK1107: invalid or corrupt file: cannot read at 0x588

Edita ese OBJ a ver que tiene dentro

Re: Archivo de compilacion .mak para Visual Studio

Posted: Sun Jan 19, 2025 10:32 pm
by Compuin
Asi la tengo ya configurada maestro

Re: Archivo de compilacion .mak para Visual Studio

Posted: Sun Jan 19, 2025 10:33 pm
by Compuin
Aca esta

Code: Select all | Expand

/*
 * Harbour 3.2.0dev (r2008190002)
 * Microsoft Visual C 19.27.29112 (32-bit)
 * Generated C source from "prg\one.prg"
 */

#include "hbvmpub.h"
#include "hbinit.h"


HB_FUNC( MAIN );
HB_FUNC_EXTERN( TWO );
HB_FUNC_EXTERN( THREE );
HB_FUNC_EXTERN( FW_GT );
HB_FUNC_EXTERN( ERRORSYS );
HB_FUNC_INITSTATICS();


HB_INIT_SYMBOLS_BEGIN( hb_vm_SymbolInit_ONE )
{ "MAIN", {HB_FS_PUBLIC | HB_FS_FIRST | HB_FS_LOCAL}, {HB_FUNCNAME( MAIN )}, NULL },
{ "TWO", {HB_FS_PUBLIC}, {HB_FUNCNAME( TWO )}, NULL },
{ "THREE", {HB_FS_PUBLIC}, {HB_FUNCNAME( THREE )}, NULL },
{ "FW_GT", {HB_FS_PUBLIC}, {HB_FUNCNAME( FW_GT )}, NULL },
{ "ERRORSYS", {HB_FS_PUBLIC}, {HB_FUNCNAME( ERRORSYS )}, NULL },
{ "(_INITSTATICS00002)", {HB_FS_INITEXIT | HB_FS_LOCAL}, {hb_INITSTATICS}, NULL }
HB_INIT_SYMBOLS_EX_END( hb_vm_SymbolInit_ONE, "prg\\one.prg", 0x0, 0x0003 )

#if defined( HB_PRAGMA_STARTUP )
   #pragma startup hb_vm_SymbolInit_ONE
#elif defined( HB_DATASEG_STARTUP )
   #define HB_DATASEG_BODY    HB_DATASEG_FUNC( hb_vm_SymbolInit_ONE )
   #include "hbiniseg.h"
#endif

HB_FUNC( MAIN )
{
	static const HB_BYTE pcode[] =
	{
		36,7,0,176,1,0,20,0,36,9,0,176,2,0,
		20,0,36,11,0,100,110,7
	};

	hb_vmExecute( pcode, symbols );
}

HB_FUNC_INITSTATICS()
{
	static const HB_BYTE pcode[] =
	{
		117,5,0,2,0,116,5,0,4,0,0,82,1,0,
		100,82,2,0,7
	};

	hb_vmExecute( pcode, symbols );
}


Re: Archivo de compilacion .mak para Visual Studio

Posted: Sun Jan 19, 2025 10:45 pm
by Compuin
Maestro Linares,

Con este codigo funciona Ok, pero se le debe indicar la carpeta prg porque esta creando alli los .obj

Code: Select all | Expand

$(VCDIR)\cl.exe -TP -W3 -c /GS- /I$(HBDIR)\include /GA -Foprg\ obj\*.c 
La idea es tener separado los .prg y los.obj en carpetas diferentes

Code: Select all | Expand

# Microsoft VS2022 make sample, (c) FiveTech Software 2022
# Rutas de herramientas y librerías
HBDIR=c:\harbour_msvc
FWDIR=c:\fwh
VCDIR=c:\vc2022\bin32

.SUFFIXES: .PRG .C .OBJ .RC .RES

PRG =       \
prg\one.PRG      \
prg\two.PRG      \
prg\three.PRG 
#place here as many PRGs as needed

OBJ=$(PRG:.PRG=.OBJ)
OBJS=$(OBJ:.\=.\obj\)

PROJECT: ONE.EXE

one.exe : $(OBJS) one.res
   echo $(OBJS) > msvc.tmp
   @echo Vinculando...
   @echo $(FWDIR)\lib\FiveH32.lib $(FWDIR)\lib\FiveHC32.lib >> msvc.tmp   
   @echo $(HBDIR)\lib\win\msvc\hbrtl.lib    >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbvm.lib     >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\gtgui.lib    >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hblang.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbmacro.lib  >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbrdd.lib    >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\rddntx.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\rddcdx.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\rddfpt.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbsix.lib    >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbdebug.lib  >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbcommon.lib >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbpp.lib     >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbwin.lib    >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbcplr.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\xhb.lib      >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbpcre.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbct.lib     >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbcpage.lib  >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbzlib.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\png.lib      >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbziparc.lib >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbmzip.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\minizip.lib  >> msvc.tmp

   @echo kernel32.lib  >> msvc.tmp
   @echo user32.lib    >> msvc.tmp
   @echo gdi32.lib     >> msvc.tmp
   @echo winspool.lib  >> msvc.tmp
   @echo comctl32.lib  >> msvc.tmp
   @echo comdlg32.lib  >> msvc.tmp
   @echo advapi32.lib  >> msvc.tmp
   @echo shell32.lib   >> msvc.tmp
   @echo ole32.lib     >> msvc.tmp
   @echo oleaut32.lib  >> msvc.tmp
   @echo uuid.lib      >> msvc.tmp
   @echo odbc32.lib    >> msvc.tmp
   @echo odbccp32.lib  >> msvc.tmp
   @echo iphlpapi.lib  >> msvc.tmp
   @echo mpr.lib       >> msvc.tmp
   @echo version.lib   >> msvc.tmp
   @echo wsock32.lib   >> msvc.tmp
   @echo msimg32.lib   >> msvc.tmp
   @echo oledlg.lib    >> msvc.tmp
   @echo psapi.lib     >> msvc.tmp
   @echo gdiplus.lib   >> msvc.tmp
   @echo winmm.lib     >> msvc.tmp
   @echo ws2_32.lib    >> msvc.tmp

   IF EXIST one.res echo one.res >> msvc.tmp

   $(VCDIR)\link @msvc.tmp /out:One.exe /nologo /subsystem:windows /force:multiple /NODEFAULTLIB:msvcrt > link.log
   @type link.log

one.res : one.rc
   $(VCDIR)\rc.exe -r -d__FLAT__ one.rc 

.PRG.OBJ:
  $(HBDIR)\bin\harbour $< /n /w /Oobj\ /i$(FWDIR)\include;$(HBDIR)\include 
  $(VCDIR)\cl.exe -TP -W3 -c /GS- /I$(HBDIR)\include /GA -Foprg\ obj\*.c 

Re: Archivo de compilacion .mak para Visual Studio

Posted: Sun Jan 19, 2025 11:24 pm
by Antonio Linares
Modifica la última línea:

$(VCDIR)\cl.exe -TP -W3 -c /GS- /I$(HBDIR)\include /GA -Foprg\ obj\*.c

así:

$(VCDIR)\cl.exe -TP -W3 -c /GS- /I$(HBDIR)\include /GA -Foobj\ obj\*.c

Re: Archivo de compilacion .mak para Visual Studio

Posted: Sun Jan 19, 2025 11:35 pm
by Compuin
Me arrroja el error tratando de buscar los .OBJ en la carpeta prg

Code: Select all | Expand

LINK : fatal error LNK1181: cannot open input file 'prg\one.OBJ'

Re: Archivo de compilacion .mak para Visual Studio

Posted: Mon Jan 20, 2025 8:47 am
by Antonio Linares
Esto está funcionando:

go.bat

Code: Select all | Expand

setlocal
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86
nmake test.mak
endlocal
myapp.exe
test.mak

Code: Select all | Expand

# Microsoft VS2022 make sample, (c) FiveTech Software 2025
# Rutas de herramientas y librerías
HBDIR=c:\harbour
FWDIR=c:\fwh
VCDIR=c:\Program\ Files\ (x86)\Microsoft\ Visual\ Studio\ 11.0\VC

.SUFFIXES: .prg .c .obj .rc .res

PRG =       \
prg\one.prg      \
prg\two.prg      \
prg\three.prg 
#place here as many PRGs as needed

OBJ=$(PRG:.prg=.obj)
OBJS=$(OBJ:prg=obj)

PROJECT: myapp.exe 

myapp.exe : $(OBJS) one.res
   echo $(OBJS) > msvc.tmp
   @echo Vinculando...
   @echo $(FWDIR)\lib\FiveH32.lib $(FWDIR)\lib\FiveHC32.lib >> msvc.tmp   
   @echo $(HBDIR)\lib\win\msvc\hbrtl.lib    >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbvm.lib     >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\gtgui.lib    >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hblang.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbmacro.lib  >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbrdd.lib    >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\rddntx.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\rddcdx.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\rddfpt.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbsix.lib    >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbdebug.lib  >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbcommon.lib >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbpp.lib     >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbwin.lib    >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbcplr.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\xhb.lib      >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbpcre.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbct.lib     >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbcpage.lib  >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbzlib.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\png.lib      >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbziparc.lib >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\hbmzip.lib   >> msvc.tmp
   @echo $(HBDIR)\lib\win\msvc\minizip.lib  >> msvc.tmp

   @echo kernel32.lib  >> msvc.tmp
   @echo user32.lib    >> msvc.tmp
   @echo gdi32.lib     >> msvc.tmp
   @echo winspool.lib  >> msvc.tmp
   @echo comctl32.lib  >> msvc.tmp
   @echo comdlg32.lib  >> msvc.tmp
   @echo advapi32.lib  >> msvc.tmp
   @echo shell32.lib   >> msvc.tmp
   @echo ole32.lib     >> msvc.tmp
   @echo oleaut32.lib  >> msvc.tmp
   @echo uuid.lib      >> msvc.tmp
   @echo odbc32.lib    >> msvc.tmp
   @echo odbccp32.lib  >> msvc.tmp
   @echo iphlpapi.lib  >> msvc.tmp
   @echo mpr.lib       >> msvc.tmp
   @echo version.lib   >> msvc.tmp
   @echo wsock32.lib   >> msvc.tmp
   @echo msimg32.lib   >> msvc.tmp
   @echo oledlg.lib    >> msvc.tmp
   @echo psapi.lib     >> msvc.tmp
   @echo gdiplus.lib   >> msvc.tmp
   @echo winmm.lib     >> msvc.tmp
   @echo ws2_32.lib    >> msvc.tmp
   @echo ucrt.lib      >> msvc.tmp

   IF EXIST one.res echo one.res >> msvc.tmp

   link @msvc.tmp /out:myapp.exe /nologo /subsystem:windows /NODEFAULTLIB:msvcrt /NODEFAULTLIB:libucrt > link.log
   @type link.log

one.res : one.rc
   rc.exe -r -d__FLAT__ one.rc 

obj\one.obj : prg\one.prg
   $(HBDIR)\bin\win\msvc\harbour prg\one.prg /n /w /Oobj\$< /i$(FWDIR)\include;$(HBDIR)\include 
   cl.exe -TP -W3 -c /GS- /I$(HBDIR)\include /GA -Foobj\ obj\*.c   

obj\two.obj : prg\two.prg
   $(HBDIR)\bin\win\msvc\harbour prg\two.prg /n /w /Oobj\$< /i$(FWDIR)\include;$(HBDIR)\include 
   cl.exe -TP -W3 -c /GS- /I$(HBDIR)\include /GA -Foobj\ obj\*.c   

obj\three.obj : prg\three.prg
   $(HBDIR)\bin\win\msvc\harbour prg\three.prg /n /w /Oobj\$< /i$(FWDIR)\include;$(HBDIR)\include 
   cl.exe -TP -W3 -c /GS- /I$(HBDIR)\include /GA -Foobj\ obj\*.c   
Si intentamos generalizar las tres ultimas reglas en una:

Code: Select all | Expand

obj\%.obj : prg\%.prg
    $(HBDIR)\bin\win\msvc\harbour $< /n /w /Oobj\$@ /i$(FWDIR)\include;$(HBDIR)\include 
    cl.exe -TP -W3 -c /GS- /I$(HBDIR)\include /GA -Foobj\ obj\*.c
Entonces da el error de que no sabe como construir obj\one.obj

Eso es lo que falta, pero como te indico, el go.bat y el test.mak aqui funcionan correctamente

Re: Archivo de compilacion .mak para Visual Studio

Posted: Mon Jan 20, 2025 10:02 am
by Antonio Linares
Por que no usas hbmk2.exe que es infinitamente más sencillo y fácil ? :)

Re: Archivo de compilacion .mak para Visual Studio

Posted: Mon Jan 20, 2025 12:20 pm
by Compuin
GRacias maestro

Uso tambien el hbmk2.exe pero al crear una Window, las barras de herramientas y la barra de status se crean mas pequenas y debo aumentar el size en toda las ventanas de la aplicacion, lo cual no es deseable.

Esa es la razon principal por la cual vuelvo al .makefile, donde si se crea bien

https://forums.fivetechsupport.com/view ... b056a18703

Re: Archivo de compilacion .mak para Visual Studio

Posted: Mon Jan 20, 2025 12:46 pm
by Antonio Linares
Puede ser que una de las dos formas de construirlo este metiendo un fichero de manifiesto dentro del EXE y de ahi la diferencia de tamaño.

Si tienes ambos EXEs por favor envíamelos y los revisamos

Re: Archivo de compilacion .mak para Visual Studio

Posted: Mon Jan 20, 2025 1:32 pm
by Compuin
Por donde se lo envio? algun ftp o email?

Re: Archivo de compilacion .mak para Visual Studio

Posted: Mon Jan 20, 2025 2:21 pm
by Compuin
El archivo manifest aplica a toda la aplicacion o se puede ajustar a ventanas/dialogos especificos?