If you are still with BCC and xHarbour/Harbour
It's time to switch to the best, with MSVC and HARBOR It really is much faster
Download newly updated HARBOR for MSVC fromhttps://github.com/FiveTechSoft/harbour_and_xharbour_builds/blob/master/README.md
Download Visual Studio Community from https://visualstudio.microsoft.com/es/vs/community/ https://visualstudio.microsoft.com/es/vs/community/
With VisualStudioSetup.exe install Desarrollo para el escritorio con C++
After installing it, if you want to make it portable you can do it with this Script
CreaPortableMSVC.bat (Change the destination route and x86 to x64 as needed)
- Code: Select all Expand view RUN
ROBOCOPY "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\bin\Hostx86\x86" D:\Compiler\VS2022\Bin /MIR
ROBOCOPY "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\lib\x86" D:\Compiler\VS2022\Lib *.LIB
ROBOCOPY "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include" D:\Compiler\VS2022\Include *.h
ROBOCOPY "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86" D:\Compiler\VS2022\Bin RC.EXE
ROBOCOPY "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86" D:\Compiler\VS2022\Bin RCDLL.DLL
ROBOCOPY "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt" D:\Compiler\VS2022\Include *.H
ROBOCOPY "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um" D:\Compiler\VS2022\Include *.H
ROBOCOPY "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared" D:\Compiler\VS2022\Include *.H
ROBOCOPY "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\x86" D:\Compiler\VS2022\Lib *.LIB
ROBOCOPY "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x86" D:\Compiler\VS2022\Lib *.LIB
After creating your VS2022 portable you can uninstall Visual Studio and recover the 10GB that you used in the installation
To link to the UEstudio Editor use this Application
- Code: Select all Expand view RUN
# --------- Harbour y FWH configuration --------
# --- general --------------------------------------
# $P - project name
# $Pp - path to project directory
# $Pn - project name
# --- compile --------------------------------------
# $I - input full name
# $Ip - input path
# $In - input name
# $Ie - input extension
# $O - output file
# $Op - path to output file
# $On - output filename (without path)
# $Oe - output extension
# $R - release/debug setting for compiler
# --- build ----------------------------------------
# $T - target full name
# $Tp - target path
# $Tn - target name
# $O - output file
# $Op - path to output file
# $On - output filename (without path)
# $Oe - output extension
# $R - release/debug setting for linker
[Settings]
Target =
Category&01 = DEFAULT RUN CONFIGURATION
Working Directory =.
Command Line Arguments =
Category&02 = Harbour Options
Automatic Memvar Declaration = no|yes
Variables Are Assumed = no|yes
Generate Preprocessed Output = no|yes
Warning Level = 1|2|3|4|0
User Include Path =
User Defines =
Compiler Options =
Linker Options =
Excluded Files = Excludes
[SettingsInfo]
Target = Provides a space for you to specify an output file and location of the program that the linker creates.
Working Directory = Provides a space for you to specify the directory in which executing occurs. If you do not specify a directory, executing occurs in the directory where the executable is located.
Command Line Arguments = Provides a space for you to specify command-line arguments you want to pass to the program at startup.
Compiler Options = Provides a space for you to specify an additional compiler options.
User Defines = Shows the switches the tool will use to build. Use ';' as delimiter.
Linker Options = Provides a space for you to specify an additional linker options.
Excluded Files = This will exclude the file(s) included in this UE project group from the build.
[SettingsReps]
User Defines = @[;|-D%s]
Automatic Memvar Declaration = no=|yes=/a
Variables Are Assumed = no=|yes=/v
Generate Preprocessed Output = no=|yes=/p
User Include Path = ^^@[;|;%s]
User Include Path&1 = ^^@[;| /i%s]
Use Multi Thread Library = no|yes
Warning Level = @/w%s
[Variables]
FWH = D:\COMPILER\FWH
HPATH = D:\COMPILER\HarbourVS
VSPATH = D:\Compiler\VS2022
HPATHL = $(HPATH)\LIB
VSPATHL = $(VSPATH)\LIB
HOPT = /n /gc0 /q $(Compiler Options) /i$(HPATH)\INCLUDE $(User Include Path&1) $(User Defines) $(Automatic Memvar Declaration) $(Variables Are Assumed) $(Generate Preprocessed Output) $(Warning Level)
COPT = -TP -W3 -c -I$(HPATH)\INCLUDE
LOPT = /nologo /subsystem:windows /force:multiple /NODEFAULTLIB:libucrt /NODEFAULTLIB:msvcrt
LIBS1 = $(FWH)\LIB\FiveH32.lib $(FWH)\LIB\FiveHC32.lib
LIBS2 = $(HPATHL)\hbrtl.lib $(HPATHL)\hbvm.lib $(HPATHL)\gtgui.lib $(HPATHL)\hblang.lib $(HPATHL)\hbmacro.lib $(HPATHL)\hbrdd.lib $(HPATHL)\rddntx.lib $(HPATHL)\rddcdx.lib $(HPATHL)\rddfpt.lib $(HPATHL)\hbsix.lib $(HPATHL)\hbcommon.lib $(HPATHL)\hbpp.lib $(HPATHL)\xhb.lib $(HPATHL)\hbzlib.lib $(HPATHL)\hbcpage.lib $(HPATHL)\hbwin.lib $(HPATHL)\hbct.lib $(HPATHL)\hbcplr.lib $(HPATHL)\hbpcre.lib $(HPATHL)\hbziparc.lib $(HPATHL)\minizip.lib $(HPATHL)\hbmzip.lib $(HPATHL)\hbtip.lib $(HPATHL)\hbzebra.lib
LIBS3 = $(VSPATHL)\user32.lib $(VSPATHL)\gdi32.lib $(VSPATHL)\winspool.lib $(VSPATHL)\comctl32.lib $(VSPATHL)\comdlg32.lib $(VSPATHL)\advapi32.lib $(VSPATHL)\shell32.lib $(VSPATHL)\ole32.lib $(VSPATHL)\oleaut32.lib $(VSPATHL)\mpr.lib $(VSPATHL)\version.lib $(VSPATHL)\msimg32.lib $(VSPATHL)\oledlg.lib $(VSPATHL)\gdiplus.lib $(VSPATHL)\winmm.lib $(VSPATHL)\ws2_32.lib $(VSPATHL)\iphlpapi.lib $(VSPATHL)\ucrt.lib
LIBS = $(LIBS1) $(LIBS2) $(LIBS3)
[Environment]
PATH = $(HPATH)\BIN;$(VSPATH)\BIN;%PATH%
INCLUDE = $(FWH)\INCLUDE;$(HPATH)\INCLUDE;$(VSPATH)\INCLUDE
LIB = $(HPATHL);$(VSPATHL);$(FWH)\LIB
BuildMode = %UESMode%
[General]
TargetExt = .EXE
ReleaseOut = Release
DebugOut = Debug
UseFullPaths = 1
UseDosNames = 0
Excludes = $(Excluded Files)
GenerateEDGroup=$(External Dependencies)
.CPP = .C
[MakeCommands]
run = Execute Application
makef = Show Makefile
[Execute Application]
Title = Execute $T
Cmd0 = $(Command Line Arguments)
Depends = $T
ShowWindow = 1
DisplayConsole = 0
[Show Makefile]
Title=Show makefile
Cmd0=uestudio makefile
ShowWindow=1
DisplayConsole=0
[InsertFiles]
[FileGroups]
FGO = .obj;
FGR = .res;
FGL = .lib;
FGD = .def;
[GroupFormats]
FGO = %s
FGR = %s
FGL = %s
[Build]
Out = $T
Depends = $FGO $FGR
DebugFlag =
ReleaseFlag =
Cmd0 = $(VSPATH)\BIN\LINK $(LOPT) /OUT:$Pp\$T $FGO $FGR $(LIBS1) $(LIBS2) $(LIBS3)
Cmd1 = $Pp\$T
[.PRG]
Out = $In.c
DebugFlag = /b
ReleaseFlag = /l
Cmd0 = $(HPATH)\BIN\harbour $I $(HOPT) $R /o$O
IncFiles = 1
CaseSensitive = 0
IncDirs = .;$(INCLUDE);
IncKeyWords = #include;
Comments = /*.*/.//.eol.
[.C]
Out = $In.obj
Cmd0 = $(VSPATH)\BIN\cl.exe $(COPT) $I
[.RC]
Out = $In.res
Cmd0 = $(VSPATH)\bin\rc -r -fo$O $I
IncFiles = 1
CaseSensitive = 0
IncDirs = .;$(INCLUDE);
IncKeyWords = #include;
Comments = /*.*/.//.eol.
To link to Hbmk use this Script GoHbmk.bat
- Code: Select all Expand view RUN
- Set path=D:\Compiler\VS2022\BIN
D:\Compiler\HarbourVS\bin\hbmk2 prg\proyecto.hbp -comp=msvc -run
The proyecto.hbp
- Code: Select all Expand view RUN
- -gui
-w0
-ID:\Compiler\FWH\include;D:\Compiler\VS2022\include
programa1.PRG
programa1.RES
-LD:\Compiler\FWH\LIB;D:\Compiler\VS2022\lib
-lfiveh32
-lfivehc32
-lgdiplus
-lOleDlg
-lversion
-lucrt
xhb.hbc
hbct.hbc
hbwin.hbc
hbmzip.hbc
hbziparc.hbc
-ldflag=/NODEFAULTLIB:libucrt
-ldflag=/NODEFAULTLIB:msvcrt
programa.RC
With MSVC you can include the mysqlclient.lib library from FWH which is for MySql/MariaDB which makes your system 100% portable and does not need libmariadb.dll and libmysql.dll (the executable grows a little)
I hope it helps you and gives you the opportunity to use these wonderful tools with which you will notice the big difference in the performance of your systems.