Page 1 of 2
Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Sun Jun 01, 2014 7:52 am
by Antonio Linares
go.bat
Code: Select all | Expand
@set oldpath=%path%
@set oldinclude=%include%
@set oldlib=%lib%
@set oldlibpath=%libpath%
if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" call "%ProgramFiles%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86_amd64
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86_amd64
c:\"Program Files (x86)\Microsoft Visual Studio 12.0"\VC\bin\nmake -ftest.mak
@set path=%oldpath%
@set include=%oldinclude%
@set lib=%oldlib%
@set libpath=%oldlibpath%
@set oldpath=""
@set oldinclude=""
@set oldlib=
@set oldlibpath=
if errorlevel==0 one.exe
test.mak
Code: Select all | Expand
#Microsoft VS2013 make sample, (c) FiveTech Software 2014
HBDIR=c:\harbour
FWDIR=c:\fwteam
VCDIR="c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC"
SDKDIR="c:\Program Files (x86)\Windows Kits\8.1"
.SUFFIXES: .prg .c .obj .rc .res
one.exe : one.obj two.obj three.obj one.res
echo one.obj two.obj three.obj > msvc.tmp
echo $(FWDIR)\lib\FiveH64.lib $(FWDIR)\lib\FiveHC64.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbrtl.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbvm.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\gtgui.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hblang.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbmacro.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbrdd.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\rddntx.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\rddcdx.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\rddfpt.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbsix.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbdebug.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbcommon.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbpp.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbwin.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbcplr.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\xhb.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbpcre.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbct.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbcpage.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\hbzlib.lib >> msvc.tmp
echo $(HBDIR)\lib\vc64\png.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
IF EXIST one.res echo one.res >> msvc.tmp
link @msvc.tmp /nologo /subsystem:windows /force:multiple /NODEFAULTLIB:libc > link.log
@type link.log
@del one.c
@del two.c
@del three.c
@del msvc.tmp
one.obj : one.c
two.obj : two.c
three.obj : three.c
one.c : one.prg
two.c : two.prg
three.c : three.prg
one.res : one.rc
rc.exe -r -d__FLAT__ one.rc
.prg.c:
$(HBDIR)\bin\harbour $< /n /i$(FWDIR)\include;$(HBDIR)\include
.c.obj:
cl.exe -c -TC -W3 -I$(HBDIR)\include -I$(SDKDIR)\include -I$(VCDIR)\include $<
uno.prg
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
Two()
Three()
return nil
two.prg
Code: Select all | Expand
#include "FiveWin.ch"
function Two()
local oWnd
DEFINE WINDOW oWnd TITLE "FWH64 and Harbour 64 bits for Microsoft Visual Studio 2013"
ACTIVATE WINDOW oWnd
return nil
three.prg
Code: Select all | Expand
function Three()
MsgInfo( "three.prg also linked" )
return nil
one.rc
Podeis descargarlo desde aqui:
https://bitbucket.org/fivetech/fivewin-contributions/downloads/vs2013_make.zip
Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Mon Jun 09, 2014 8:45 pm
by Patricio Avalos Aguirre
Hola Antonio
Habra makefile para harbour y FWH de 32bit
ya que cambie para adaptarlo a 32bit pero sale error
c:\hb30\lib\win\bcc\hbrtl.lib : fatal error LNK1136: archivo no válido o dañado
Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Mon Jun 09, 2014 8:54 pm
by JmGarcia
¿Quiere decir que con los ficheros
GO.bat y
TEST.mak, teniendo instalado el Visual Studio Express 2013, puedo compilar programas de 64bits sin usar el IDE?

Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Mon Jun 09, 2014 9:07 pm
by Antonio Linares
JM,
Claro que si!

Esto es lo bueno de trabajar con Harbour y FWH, que podemos construir nuestras aplicaciones como queramos: con el IDE de VS, sin IDE, con bats, con makes, con utilidades de terceros, desde UEStudio, etc.
Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Mon Jun 09, 2014 9:46 pm
by Patricio Avalos Aguirre
Hola
baje harbour para vc desde aqui
https://code.google.com/p/harbour-and-xharbour-builds/downloads/detail?name=harbour_msvc2012_20131007_2.zip&can=2&q=pero ahora obtengo estos errores
one.obj : error LNK2001: símbolo externo HB_FUN_FW_GT sin resolver
two.obj : error LNK2001: símbolo externo HB_FUN_FW_GT sin resolver
one.obj : error LNK2001: símbolo externo HB_FUN_ERRORSYS sin resolver
two.obj : error LNK2001: símbolo externo HB_FUN_ERRORSYS sin resolver
one.obj : error LNK2019: símbolo externo hb_vmExecute sin resolver al que se hace referencia en la función HB_FUN_MAIN
two.obj : error LNK2001: símbolo externo hb_vmExecute sin resolver
three.obj : error LNK2001: símbolo externo hb_vmExecute sin resolver
one.obj : error LNK2019: símbolo externo hb_vmProcessSymbols sin resolver al que se hace referencia en la función hb_vm_SymbolInit_ONE
two.obj : error LNK2001: símbolo externo hb_vmProcessSymbols sin resolver
three.obj : error LNK2001: símbolo externo hb_vmProcessSymbols sin resolver
two.obj : error LNK2001: símbolo externo HB_FUN_TWINDOW sin resolver
three.obj : error LNK2001: símbolo externo HB_FUN_MSGINFO sin resolver
LIBCMT.lib(wincrt0.obj) : error LNK2019: símbolo externo WinMain sin resolver al que se hace referencia en la función __tmainCRTStartup
one.exe : fatal error LNK1120: 7 externos sin resolver
aqui esta el msvc.tmpone.obj two.obj three.obj
c:\fwh\lib\FiveH32.lib c:\fwh\lib\FiveHC32.lib
c:\hb30msv\lib\hbrtl.lib
c:\hb30msv\lib\hbvm.lib
c:\hb30msv\lib\gtgui.lib
c:\hb30msv\lib\hblang.lib
c:\hb30msv\lib\hbmacro.lib
c:\hb30msv\lib\hbrdd.lib
c:\hb30msv\lib\rddntx.lib
c:\hb30msv\lib\rddcdx.lib
c:\hb30msv\lib\rddfpt.lib
c:\hb30msv\lib\hbsix.lib
c:\hb30msv\lib\hbdebug.lib
c:\hb30msv\lib\hbcommon.lib
c:\hb30msv\lib\hbpp.lib
c:\hb30msv\lib\hbwin.lib
c:\hb30msv\lib\hbcplr.lib
c:\hb30msv\lib\xhb.lib
c:\hb30msv\lib\hbpcre.lib
c:\hb30msv\lib\hbct.lib
c:\hb30msv\lib\hbcpage.lib
c:\hb30msv\lib\hbzlib.lib
c:\hb30msv\lib\png.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
one.res
Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Mon Jun 09, 2014 9:57 pm
by Antonio Linares
Patricio,
Este fín de semana publiqué un makefile completo para Harbour 32 bits y Visual Studio 2012:
viewtopic.php?p=160199#p160199c:\hb30\lib\win\bcc\hbrtl.lib : fatal error LNK1136: archivo no válido o dañado
Ojo que estás usando la de "bcc" y tendrías que usar la de "msvc" en caso de que hayas construido tu Harbour.
Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Mon Jun 09, 2014 10:05 pm
by Patricio Avalos Aguirre
Hola antonio
gracias, esperaremos los make de 32bit, para visual C 2013
que lo baje desde aqui por 90 dias
http://www.visualstudio.com/es-es/downloads
Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Mon Jun 09, 2014 10:11 pm
by Antonio Linares
Patricio,
Disculpa, me despisté y pensé que era para Borland y te refieres a Microsoft (tantas versiones a las que dar soporte)

A ver, voy a adaptarte el de 64 a 32 bits. Son muy pocos cambios...
Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Mon Jun 09, 2014 10:15 pm
by Antonio Linares
Patricio,
No lo he probado, pero debería funcionarte. Pruébalo y si falla me lo comentas, gracias
go.bat
Code: Select all | Expand
@set oldpath=%path%
@set oldinclude=%include%
@set oldlib=%lib%
@set oldlibpath=%libpath%
if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" call "%ProgramFiles%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
c:\"Program Files (x86)\Microsoft Visual Studio 12.0"\VC\bin\nmake -ftest.mak
@set path=%oldpath%
@set include=%oldinclude%
@set lib=%oldlib%
@set libpath=%oldlibpath%
@set oldpath=""
@set oldinclude=""
@set oldlib=
@set oldlibpath=
if errorlevel==0 one.exe
test.mak
Code: Select all | Expand
#Microsoft VS2013 make sample, (c) FiveTech Software 2014
HBDIR=c:\harbour
FWDIR=c:\fwh
VCDIR="c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC"
SDKDIR="c:\Program Files (x86)\Windows Kits\8.1"
.SUFFIXES: .prg .c .obj .rc .res
one.exe : one.obj two.obj three.obj one.res
echo one.obj two.obj three.obj > msvc.tmp
echo $(FWDIR)\lib\FiveH32.lib $(FWDIR)\lib\FiveHC32.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbrtl.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbvm.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\gtgui.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hblang.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbmacro.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbrdd.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\rddntx.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\rddcdx.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\rddfpt.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbsix.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbdebug.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbcommon.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbpp.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbwin.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbcplr.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\xhb.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbpcre.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbct.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbcpage.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\hbzlib.lib >> msvc.tmp
echo $(HBDIR)\lib\vc32\png.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
IF EXIST one.res echo one.res >> msvc.tmp
link @msvc.tmp /nologo /subsystem:windows /force:multiple /NODEFAULTLIB:libc > link.log
@type link.log
@del one.c
@del two.c
@del three.c
@del msvc.tmp
one.obj : one.c
two.obj : two.c
three.obj : three.c
one.c : one.prg
two.c : two.prg
three.c : three.prg
one.res : one.rc
rc.exe -r -d__FLAT__ one.rc
.prg.c:
$(HBDIR)\bin\harbour $< /n /i$(FWDIR)\include;$(HBDIR)\include
.c.obj:
cl.exe -c -TC -W3 -I$(HBDIR)\include -I$(SDKDIR)\include -I$(VCDIR)\include $<
uno.prg
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
Two()
Three()
return nil
two.prg
Code: Select all | Expand
#include "FiveWin.ch"
function Two()
local oWnd
DEFINE WINDOW oWnd TITLE "FWH and Harbour 32 bits for Microsoft Visual Studio 2013"
ACTIVATE WINDOW oWnd
return nil
three.prg
Code: Select all | Expand
function Three()
MsgInfo( "three.prg also linked" )
return nil
one.rc
Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Tue Jun 10, 2014 8:03 pm
by Patricio Avalos Aguirre
Hola Antonio
si lo s tenia casi igual, al compilar sale estos errores en
link.logone.obj : error LNK2001: símbolo externo HB_FUN_FW_GT sin resolver
two.obj : error LNK2001: símbolo externo HB_FUN_FW_GT sin resolver
one.obj : error LNK2001: símbolo externo HB_FUN_ERRORSYS sin resolver
two.obj : error LNK2001: símbolo externo HB_FUN_ERRORSYS sin resolver
one.obj : error LNK2019: símbolo externo hb_vmExecute sin resolver al que se hace referencia en la función HB_FUN_MAIN
two.obj : error LNK2001: símbolo externo hb_vmExecute sin resolver
three.obj : error LNK2001: símbolo externo hb_vmExecute sin resolver
one.obj : error LNK2019: símbolo externo hb_vmProcessSymbols sin resolver al que se hace referencia en la función hb_vm_SymbolInit_ONE
two.obj : error LNK2001: símbolo externo hb_vmProcessSymbols sin resolver
three.obj : error LNK2001: símbolo externo hb_vmProcessSymbols sin resolver
two.obj : error LNK2001: símbolo externo HB_FUN_TWINDOW sin resolver
three.obj : error LNK2001: símbolo externo HB_FUN_MSGINFO sin resolver
LIBCMT.lib(wincrt0.obj) : error LNK2019: símbolo externo WinMain sin resolver al que se hace referencia en la función __tmainCRTStartup
one.exe : fatal error LNK1120: 7 externos sin resolver
este es el archivo que genera con las lib,
msvc.tmpone.obj two.obj three.obj
c:\fwh\lib\FiveH32.lib c:\fwh\lib\FiveHC32.lib
c:\hb30msv\lib\hbrtl.lib
c:\hb30msv\lib\hbvm.lib
c:\hb30msv\lib\gtgui.lib
c:\hb30msv\lib\hblang.lib
c:\hb30msv\lib\hbmacro.lib
c:\hb30msv\lib\hbrdd.lib
c:\hb30msv\lib\rddntx.lib
c:\hb30msv\lib\rddcdx.lib
c:\hb30msv\lib\rddfpt.lib
c:\hb30msv\lib\hbsix.lib
c:\hb30msv\lib\hbdebug.lib
c:\hb30msv\lib\hbcommon.lib
c:\hb30msv\lib\hbpp.lib
c:\hb30msv\lib\hbwin.lib
c:\hb30msv\lib\hbcplr.lib
c:\hb30msv\lib\xhb.lib
c:\hb30msv\lib\hbpcre.lib
c:\hb30msv\lib\hbct.lib
c:\hb30msv\lib\hbcpage.lib
c:\hb30msv\lib\hbzlib.lib
c:\hb30msv\lib\png.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
one.res
Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Tue Jun 10, 2014 8:37 pm
by Antonio Linares
Patricio,
Tu has modificado el make que yo he publicado ?
Aqui ha funcionado bien a la primera

Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Tue Jun 10, 2014 9:12 pm
by cnavarro
JmGarcia wrote:¿Quiere decir que con los ficheros
GO.bat y
TEST.mak, teniendo instalado el Visual Studio Express 2013, puedo compilar programas de 64bits sin usar el IDE?

Solo una nota de mi experiencia
Si no utilizas una aplicacion ( editor, etc ) que llame a ese .bat que generes y utilizas la ventana de comandos, y llamas muchas veces al .bat (prueba y error), es recomendable que las llamadas iniciales del .bat
@set oldpath=%path%
@set oldinclude=%include%
@set oldlib=%lib%
@set oldlibpath=%libpath%
if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" call "%ProgramFiles%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
las coloques en otro .bat anterior para que no sean llamadas continuamente cada vez que ejecutes tu .bat, ya que puede llegar un momento en que no puedas seguir ejecutando la compilacion ya que no puede asignar el valor para alguna de las variables de entorno ( tipo path = %path%;otro path ) por exceder la longitud máxima permitida que son
llamados desde el fichero vcvarsall.bat.
Si la llamada a tu .bat lo realizas desde una aplicacion como ya te he comentado, no importa, ya que cuando es ejecutado y vuelve a tu aplicacion esas variables de entorno vuelven al valor que tenían en el sistema ya que tu bat se cierra y vuelve a windows.
Espero haberme explicado
Esto me ha pasado haciendo pruebas y he tenido que cerrar la ventana DOS y volver a abrirla.
Si no es debido a esto, espero que me corrija alguien
Saludos
Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Tue Jun 10, 2014 9:19 pm
by Antonio Linares
Cristobal,
Ese problema parece que se soluciona haciendo esto:
@set oldpath=%path%
@set oldinclude=%include%
@set oldlib=%lib%
@set oldlibpath=%libpath%
...
@set path=%oldpath%
@set include=%oldinclude%
@set lib=%oldlib%
@set libpath=%oldlibpath%
@set oldpath=""
@set oldinclude=""
@set oldlib=
@set oldlibpath=
por lo menos a mi ya con eso no me ha vuelto a aparecer el problema que comentas

Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Tue Jun 10, 2014 9:26 pm
by cnavarro
Efectivamente Antonio
Asi no me da errores, debo haber "tocado" el .bat
Gracias
Re: Makefile para FWH64 con Visual Studio 2013 y multiples PRGs
Posted: Wed Jun 11, 2014 7:53 am
by JmGarcia
Gracias Antonio y Cnavarro.
He leído por el foro que el Visual Studio Express 2013 no tiene editor de recursos.
¿Quiere esto decir que no tiene "compilador" de recursos?
Me refiero a la línea siguiente del fichero "test.mak":
En este enlace aparecen 3 Visual Studio:
Visual Studio Express 2013 para Web
Visual Studio Express 2013 con Update 2 para Windows
Visual Studio Express 2013 para escritorio de Windows¿Cuál he de coger (gratis) para trabajar con FWH?
¿Compila en 32 y 64 bits?