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?