Форум » GUI » HwBuilder » Ответить

HwBuilder

alkresin: Сделал утилиту для сборки программ типа hbmk: http://www.kresin.ru/hwbuilder.html. Поначалу - для HwGUI, а потом увидел, что можно и для других GUI использовать, в том числе для Minigui (проверил - работает), и для консольных программ. Hbmk не устраивал, потому что надо много дополнительных вещей указывать каждый раз для GUI и потому что он не всегда корректно определяет пути к компиляторам (в HwBuider они однозначно прописываются в ini). Собственно, я им и не пользовался, а bat'ники и sh-скрипты надоело писать каждый раз. На сайте - бинарники. Исходники - в комплекте HwGUI (пока на SVN).

Ответов - 28, стр: 1 2 All

gfilatov2002: alkresin пишет: можно и для других GUI использовать Попробовал собрать простой проект для Минигуи в качестве примера. Исполняемый файл собрался, но совершенно не понятно, как подключить свои ресурсы в программу, поскольку при сборке используется только фиксированный RC-файл с манифестом из папки image.

Andrey: У меня много rc-файлов в проекте, 35 штук. В связи с ограничениями в BCC 5.50 на большие .res пришлось делать кучу RC-файлов. Да так и осталось. Так что при сборке нужно бы это предусматривать. [pre2]Resource\Ab4win.rc Resource\Ab4win_cnf.rc Resource\Ab4win0.rc Resource\Ab4win1.rc ....[/pre2]

Dima: alkresin Александр а есть зеркало сайта http://www.kresin.ru а то у нас зачем то заблочили этот сайт ?


alkresin: По rc-файлам надо подумать. Я сам их не использую, в частности - потому что они только на Windows работают, поэтому как-то упустил этот момент.

alkresin: Dima пишет: Александр а есть зеркало сайта http://www.kresin.ru а то у нас зачем то заблочили этот сайт ? Нет зеркала. И давно заблокировали? Он просто не отзывается или сообщение какое-то?

Pasha: Сейчас все друг друга блокируют. Забейте Нас к примеру блокирует гугл: 03. That’s an error. Your client does not have permission to get URL / from this server. That’s all we know. Причем не всех провайдеров, с мобильного интернета пускает. Иногда мы блокируем гугл Для блокировок есть vpn.

alkresin: Обновил Windows бинарники на сайте - решена проблема с файлами ресурсов. Теперь их можно добавлять в любом количестве в список файлов вместе с prg в файле проекта или в командной строке.

Dima: Pasha пишет: Для блокировок есть vpn. + TOR

gfilatov2002: alkresin пишет: решена проблема с файлами ресурсов Спасибо. Удалось подключить ресурсные файлы Миингуи при сборке тестового примера. Полный лог-файл сборки hwbuild.log см. ниже: [pre2] *** demo.prg *** > c:\minigui\harbour\bin\harbour -n -q -ic:\minigui\harbour\include -ic:\minigui\include -osample\obj\bcc\ sample\demo.prg Harbour 3.2.0dev (r2311302136) Copyright (c) 1999-2023, https://harbour.github.io/ *** Other.prg *** > c:\minigui\harbour\bin\harbour -n -q -ic:\minigui\harbour\include -ic:\minigui\include -osample\obj\bcc\ sample\Other.prg Harbour 3.2.0dev (r2311302136) Copyright (c) 1999-2023, https://harbour.github.io/ *** demo.c *** > c:\Borland\BCC58\bin\bcc32.exe -c -d -w -O2 -Ic:\minigui\harbour\include -Ic:\minigui\include -osample\obj\bcc\demo.obj sample\obj\bcc\demo.c Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland sample\obj\bcc\demo.c: *** Other.c *** > c:\Borland\BCC58\bin\bcc32.exe -c -d -w -O2 -Ic:\minigui\harbour\include -Ic:\minigui\include -osample\obj\bcc\Other.obj sample\obj\bcc\Other.c Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland sample\obj\bcc\Other.c: > c:\Borland\BCC58\bin\brc32 -r \minigui\resources\minigui.rc -fominigui Borland Resource Compiler Version 5.40 Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved. > c:\Borland\BCC58\bin\brc32 -r \minigui\resources\hbprinter.rc -fohbprinter Borland Resource Compiler Version 5.40 Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved. > c:\Borland\BCC58\bin\brc32 -r \minigui\resources\miniprint.rc -fominiprint Borland Resource Compiler Version 5.40 Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved. *** demo.exe *** > c:\Borland\BCC58\bin\ilink32 -Gn -aa -Tpe -Lc:\minigui\harbour\lib -Lc:\minigui\lib -Lc:\Borland\BCC58\lib\psdk c0w32.obj sample\obj\bcc\demo.obj sample\obj\bcc\Other.obj, sample\demo.exe,, minigui.lib hbprinter.lib miniprint.lib bostaurus.lib hbwin.lib xhb.lib hbvm.lib hbrtl.lib gtgui.lib gtwin.lib hbcpage.lib hblang.lib hbrdd.lib hbmacro.lib hbpp.lib rddntx.lib rddcdx.lib rddfpt.lib hbsix.lib hbcommon.lib hbct.lib hbcplr.lib hbpcre.lib hbzlib.lib ws2_32.lib cw32.lib import32.lib iphlpapi.lib,, minigui.res hbprinter.res miniprint.res Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland === sample\demo.exe created successfully! === [/pre2] Но выявилась другая проблема: при сборке библиотеки утилита tlib просит добавить параметр /P32 в эту строку исходника hwb.prg "{path}\tlib /P32 {out} {objs}", ;

alkresin: gfilatov2002 пишет: при сборке библиотеки утилита tlib просит добавить параметр /P32 Хм... У меня с bcc5 - не требует, hwgui нормально собирается. Добавлю сегодня флаги для сборки библиотеки, строчку соответствующую в ini.

alkresin: Обновил Windows бинарники на сайте. Свои флаги для сборки библиотеки теперь можно указать в ini, например: [C_COMPILER] id=bcc ... def_libflags=/P32 или непосредственно в файле проекта: {bcc}def_libflags=/P32

Andrey: Можно ли вашу утилиту использовать для сборки МиниГуи под VisualC ? Вот такой Demo.hbp -trace # Compilation keys -prgflag=-w2 -es1 # Enable multi/single-thread Harbour VM -mt # Incremental-compilation mode -inc # folder where are all the (*.obj) this project -workdir=OBJ # Name of output EXE-file -oDemo_timer # pass single flag to output executable when -run option is used # передать одиночный флаг на выходной исполняемый файл, если используется опция -run #-runflag=1 # List all (*.prg) this project main.prg main_before.prg main_splash.prg main_check.prg main_misc.prg main_other.prg main_timer.prg MainMenu_form.prg # кнопки главного меню - таблицы table12.prg table3.prg table4.prg table4menu.prg table4_card.prg # вспомогательные модули menu_context.prg form_Password.prg form_CopyData.prg form_TimerShow.prg WaitWinGif.prg util_c_code.prg util_button.prg util_misc.prg Users.prg ErrorSys3.prg IniLoad.prg IniConfig.prg other2fun.prg # ACHOICE() меню на объекте ButtonEx test_achoice.prg util_achoice.prg # Resources for the project Resource\demo.rc Resource\demo_64.rc Resource\demo_128.rc Resource\demoDummy1.rc Resource\demoDummy2.rc #Path to the main and the auxiliary libraries (*.lib) #-lminigui - для VC не надо #-ltsbrowse - для VC не надо -lTsbViewer -lhbmemio # file encryption/decryption #-lhbaes - для VC не надо

alkresin: Можно. Главное - все правильно прописать в hwbuild.ini. Я использовал вот такой для minigui: [HARBOUR] harbour_path=c:\softools\minigui\harbour harbour_bin_path=c:\softools\minigui\harbour\bin harbour_include_path=c:\softools\minigui\harbour\include def_flags=-n -q libs=dll gtgui hbcplr hbrtl hbvm hblang hbcpage hbmacro hbrdd hbhsx rddntx rddcdx rddfpt hbsix hbcommon hbdebug hbpp hbpcre hbct hbmisc hbtip hbvpdf hbwin xhb bostaurus hbprinter miniprint socket hbhpdf libhpdf png hbzlib [GUILIB] id=minigui path=c:\softools\minigui inc_path=c:\softools\minigui\include lib_path=c:\softools\minigui\lib libs=minigui GraphPlus miniprint2 winreport tsbrowse propgrid [C_COMPILER] id=bcc bin_path=c:\borland\bcc582\bin harbour_lib_path=c:\softools\minigui\harbour\lib def_flags=-c -d -w -O2 [VIEW] font=Courier New,24 Для msvc нужна примерно такая секция: [C_COMPILER_3] id=msvc bin_path=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86 harbour_lib_path=c:\harbour\lib\win\msvc def_cflags=/TP /W3 /nologo /c def_linkflags=-SUBSYSTEM:WINDOWS env_1=PATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\\Extensions\Microsoft\IntelliCode\CLI;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\VC\VCPackages;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\devinit;C:\Windows Kits\10\bin\10.0.19041.0\x86;C:\Windows Kits\10\bin\x86;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\\MSBuild\Current\Bin;C:\Windows\Microsoft.NET\Framework\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;c:\softools\git\usr\bin;c:\tools;c:\tools\arh;c:\harbour\bin;d:\softools\mingw_w64\mingw32\bin;c:\borland\bcc55\bin;c:\softools\git\cmd;c:\softools\subversion\bin;C:\Program Files\OpenVPN\bin;C:\softools\Go\bin;C:\softools\Python\Scripts\;C:\softools\Python\;C:\Users\SYSADMIN\AppData\Local\Microsoft\WindowsApps;c:\softools\go\bin;d:\svn;c:\Program Files\Java\jdk1.8.0_231\bin;C:\Users\SYSADMIN\go\bin;c:\softools\cmake\bin;;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja env_2=INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include;C:\Windows Kits\10\include\10.0.19041.0\ucrt;C:\Windows Kits\10\include\10.0.19041.0\shared;C:\Windows Kits\10\include\10.0.19041.0\um;C:\Windows Kits\10\include\10.0.19041.0\winrt;C:\Windows Kits\10\include\10.0.19041.0\cppwinrt env_3=LIB=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\lib\x86;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x86;C:\Windows Kits\10\lib\10.0.19041.0\ucrt\x86;C:\Windows Kits\10\lib\10.0.19041.0\um\x86 env_4=LIBPATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\lib\x86;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x86;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x86\store\references;C:\Windows Kits\10\UnionMetadata\10.0.19041.0;C:\Windows Kits\10\References\10.0.19041.0;C:\Windows\Microsoft.NET\Framework\v4.0.30319 Чтобы правильно прописать все эти строчки, прочитайте внимательно http://www.kresin.ru/notes/index.php?b=blog&n=32. Что касается файла проекта - он немного, но не сильно, отличается от hbp. Логика построения такая же, см. http://www.kresin.ru/notes/index.php?b=blog&n=33 В вашем случае будет что-то вроде: makemode=on libs=TsbViewer hbmemio prgflags=-w2 -es1 objpath=obj outname=Demo_timer *.prg srcpath=Resource *.rc

SergKis: alkresin пишет [HARBOUR] harbour_path=c:\softools\minigui\harbour harbour_bin_path=c:\softools\minigui\harbour\bin harbour_include_path=c:\softools\minigui\harbour\include def_flags=-n -q libs=dll gtgui hbcplr hbrtl hbvm hblang hbcpage hbmacro hbrdd hbhsx rddntx rddcdx rddfpt hbsix hbcommon hbdebug hbpp hbpcre hbct hbmisc hbtip hbvpdf hbwin xhb bostaurus hbprinter miniprint socket hbhpdf libhpdf png hbzlib [GUILIB] id=minigui path=c:\softools\minigui inc_path=c:\softools\minigui\include lib_path=c:\softools\minigui\lib libs=minigui GraphPlus miniprint2 winreport tsbrowse propgrid [C_COMPILER] id=bcc bin_path=c:\borland\bcc582\bin harbour_lib_path=c:\softools\minigui\harbour\lib def_flags=-c -d -w -O2 [VIEW] font=Courier New,24 А так можно ? в среде запуска стоит SET HMG=c:\softools\minigui SET HMG_BCC=c:\borland\bcc58 ... тогда[pre2] [HARBOUR] harbour_path=%HMG%\harbour harbour_bin_path=%HMG%\harbour\bin harbour_include_path=%HMG%\harbour\include ... [GUILIB] id=minigui path=%HMG% inc_path=%HMG%\include lib_path=%HMG%\lib libs=minigui GraphPlus miniprint2 winreport tsbrowse propgrid [C_COMPILER] id=bcc bin_path=%HMG_BCC%\bin harbour_lib_path=%HMG%\harbour\lib def_flags=-c -d -w -O2 [VIEW] font=Courier New,24 [/pre2] и вставить, расширить список lib, prg, obj из внешних файлов, например командой libs = ... #include .\my_lib.txt ... #include .\my_prg.txt ... #include .\my_obj.txt У меня своя программа ведения проектов и она формирует списки динамически по потребностям для сборки bat файлом, т.е. есть постоянные lib, obj + динамически сформированные, prg списки форм. только от времени модификаций

alkresin: SergKis пишет: SET HMG=c:\softools\minigui ... [HARBOUR] harbour_path=%HMG%\harbour ... Хорошая идея, сделаю. #include .\my_lib.txt ... #include .\my_prg.txt Имеете ввиду, в файле проекта?

SergKis: alkresin пишет Имеете ввиду, в файле проекта? Да. Сейчас для 1 бат файла сборки на несколько проектов из программы создаются списки prg, obj, lib для компиляции, постоянные obj для конкретной сборки (берутся из ini описания проектов моей программы), сборка может формировать lib (в ini могут указываться др. lib только этого проекта) и ее так же надо подключать, т.е. кроме постоянных в ini прописанных, есть динамические подключения. Файл настройки ini программы ведания проектов, как есть из проекта с FireBird (3-и проекта) [pre2] [APP] Utf8=Yes Title=BK19. HMG 2.07. MSVC 2019. Notepad=\BK19\BIN\Notepad2.exe HbEdit =\BK19\BIN\HBEDIT\HbEdit.exe -pal=4 -his=0 ;AkelPad=\BK19\BIN\AkelPadU Default=02 Res=.\RES CmdComp=_hb_.cmd CmdRun= LibName= [01] Title=EAlarm. FDB => BASE.DBF PathApp=.\PRG PathExe=.\INF NameExe= Include=*.prg Exclude= Lib=.\Lib\rddletoDbf32.lib [02] Title=EAlarm 1.3. FDB => BASE.DBF PathApp=.\PRG1_3 PathExe=.\INF1_3 NameExe= Include=*.prg Exclude= Lib=.\Lib\rddletoDbf32.lib [03] Title=EAlarm 1.3. SMS and MAIL PathApp=.\PRGS PathExe=.\INFS NameExe= Include=*.prg Exclude= Lib=.\Lib\Hmg32_leto1.lib .\Lib\rddleto321.lib [04] [05] [06] [07] [08] [09] [Common] FontName=Arial FontSize=11 SizeScale=100,100 [Window] Form_1Form_1=75,42,1209,642, wErrorwError=458,2,909,313, [Browse] brwProg=304,87,87,87,604, brwEntiti=217,434,434,87, brwEntAll=173,346,346,87,216, [Obj] 1=\BK19\OBJ\ErrSysHMG_.obj %O%\%P%.obj \BK19\OBJ\MapFile.obj [Lib] 1=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib 2=shell32.lib ole32.lib oleaut32.lib uuid.lib Vfw32.lib comctl32.lib 3=odbc32.lib odbccp32.lib ShLwapi.lib WinMM.lib legacy_stdio_definitions.lib 4=ws2_32.lib WSock32.Lib ImageHlp.lib htmlhelp.lib MSImg32.lib IPHlpApi.lib 5=/nologo /incremental:no /pdb:%O%\%P%.pdb /SUBSYSTEM:WINDOWS 6=/machine:I386 /out:%W%\%P%.exe 7=hbdebug.lib hbvmmt.lib hbrtl.lib hblang.lib hbrdd.lib rddfpt.lib 8=rddntx.lib rddcdx.lib hbmacro.lib hbpp.lib hbsix.lib hbcommon.lib 9=hbcplr.lib hbgt.lib hbcpage.lib hbct.lib hbmemio.lib hbzlib.lib 10=hbmisc.lib hbwin.lib xhb.lib rddsql.lib rddbm.lib 11=bk32_c.lib gtwin.lib gtgui.lib hbLibXL_c.lib hbxlsxml.lib 12=MiniGui32_c.lib MiniGUI32_c2.lib MiniGUI32_2.lib Hmg32_dop.lib 13=xhb.lib hbpcre.lib ;14=rddleto321.lib ;15=rddletoDbf32.lib [FColor] 1={"CLASS", "R"} 2={"ACCESS", "V"} 3={"ASSIGN", "V"} 4={"METHOD", "M"} 5={"DEFINE", "H"} 6={"STATIC", "B"} [Entiti] 01=FUNC 02=FUNCTION 03=PROC 04=PROCEDURE 05=CLASS 06=ACCESS 07=ASSIGN 08=METHOD 09=DEFINE WINDOW 10=INIT WINDOW 11=INIT DIALOG 12=STAT FUNC 13=STATIC FUNC 14=STATIC FUNCTION 15=STAT PROC 16=STATIC PROC 17=STATIC PROCEDURE 18=HB_FUNC( 19=INIT PROC 20=INIT PROCEDURE 21=EXIT PROC 22=EXIT PROCEDURE 23=CASE WM_... [/pre2]

alkresin: Можно будет сделать. "#", правда, используется для комментариев, поэтому лучше будет @<имя файла> - можно будет использовать это и в файле проекта, и в командной строке.

SergKis: alkresin пишет [VIEW] font=Courier New,24 Это секция просмотра ошибок, правильно понимаю ? Можно ли сделать запуск своего (bat, exe) просмотра ? У меня в проекте можно запустить (определяет bat файл сборки) ключ Notepad=... или свою программу с разбором протокола и перехода по строкам ошибок в редактирование для правки. Можно обойтись и блокировкой показа вашего view с возвратом Errorlevel HwBuilder

alkresin: Это для GUI интерфейса программы. hwbc выводит все в консоль, hwb - в окно, где можно смотреть результаты сборки в полном и сокращенном виде, сохранить.. Кроме того, если запустить hwb без параметров или с файлом проекта и опцией -Open, открывается окно проекта, где можно его отредактировать, запустить на сборку с выбранными параметрами ( компилятором и пр. ). > Можно ли сделать запуск своего (bat, exe) просмотра ? Можно.

alkresin: Обновил бинарники на сайте, теперь это версия 1.5 По предложению Сергея добавлена возможность использовать в путях в hwbuild.ini переменные окружения, например, harbour_bin_path=%HB_PATH%\bin или harbour_bin_path=$HB_PATH\bin В командной строке и в файле проекта можно включить содержимое других файлов с помощью конструкции @<file>. Если файл указан без пути к нему, программа ищет его сначала в текущем каталоге, а потом - в каталоге, где находится исполняемый файл hwb/hwbc.

SergKis: alkresin пишет Обновил бинарники на сайте, теперь это версия 1.5 Что то не оч. понимаю, как реализовать на hwBuilder схему работы cmd файла из ini проекта, указанного выше CmdComp=_hb_.cmd Его содержимое [pre2] @echo off if %1.==O. goto Obj if not %1.==. goto e rem ------------------- Start compile, link :Start SET BK=\BK19 SET HB=%BK%\HB32 SET VC=%BK%\MSVC SET BIN=%HB%\bin set HB_BK=%BK% set HB_HB=%HB_BK%\hb32 set HB_VC=%HB_BK%\MSVC Call %HB_VC%\vcvar.cmd Call %HB_HB%\hbvar.cmd SET BIN=%BIN%;%VCE% rem -------------------------- Keys for Harbour.exe, cl.exe SET HL=-n -m -es0 -w0 -ql SET CL=/nologo /EHsc /W3 /O2 /DWIN32 /DNDEBUG /D_WINDOWS /D_MBCS rem -------------------------- No modification variable !!! SET O=.\C SET C=.\C SET R=.\RES SET W=.\WRK SET OU=%C% SET ERR=N if NOT exist %W%\_hbSets.cmd ( Echo **************************************** Echo *** File not found %W%\_hbSets.cmd ! Echo **************************************** pause exit ) rem ---------------------- Set variable Enveroment ------------------ Call %W%\_hbSets.cmd if NOT exist %P%.prg ( Echo *************************************** Echo *** File not found %P%.prg ! Echo *************************************** pause exit ) for %%i in ( %P% ) Do ( SET PT=%%~pi SET PP=%%~ni SET EX=%%~xi ) if exist %W%\%PP%.EXE Del %W%\%PP%.EXE > nul if exist %C%\%PP%.obj Del %C%\%PP%.obj > nul rem ------------------ FileName out protokol SET OCMD=_hb_.txt echo %P% > %OCMD% echo %P% echo -------------------------- SET OBJ=%BK%\OBJ SET LIB=%BK%\lib\;%LIB% SET INCLUDE=.\Include;%BK%\MiniGui\Include;%INCLUDE% SET PATH=%BIN%;%PATH% if not exist %C%\*.tmp goto Compile rem --------------------------- Create obj for selected project :ObjCreate for %%d in ( %C%\*.tmp ) Do Call %0 O %%d if %ERR%==Y goto err rem --------------------------- Create Lib for selected project :LibCreate if not exist %C%\*.obj goto Compile if not exist %W%\o_%PP%.txt goto Compile if exist %C%\%PP%.lib Del %C%\%PP%.lib > nul lib.exe /OUT:%C%\%PP%.lib @%W%\o_%PP%.txt > nul rem --------------------------- Create Lib for all project if %LNM%.==. goto Compile if not exist %W%\o_*.txt goto Compile for %%i in ( %LNM% ) Do ( SET LCT=%%~pi SET LNM=%%~ni SET LEX=%%~xi ) if %LCT%.==. goto LibName if not exist %LCT% md %LCT% :LibName if %LCT%.==. SET LCT=%C% if exist %LCT%\%LNM%.lib Del %LCT%\%LNM%.lib > nul for %%d in ( %W%\o_*.txt ) Do lib.exe /OUT:%LCT%\%LNM%.lib @%%d > nul rem --------------------------- Compile Harbour :Compile HARBOUR.EXE %HL% -i%INCLUDE% -o%C%\ %C%\%PP%.prg 2>> %OCMD% if errorlevel 1 SET ERR=Y if %ERR%==Y goto err cl.exe /TC %C%\%PP%.c %CL% /Fp%O%\%PP%.pch /Fo%O%\ /Fd /c >> %OCMD% rem --------------------------- Resource and linker if exist %R%\%PP%.RC ( echo %R%\%PP%.rc >> %OCMD% pushd %R% rem RC.EXE %PP%.RC >> ..\%OCMD% %BK%\BIN\RC\RC.EXE %PP%.RC >> ..\%OCMD% if errorlevel 1 SET ERR=Y popd LINK.EXE /RELEASE @%W%\L_%PP%.TXT %R%\%PP%.RES >> %OCMD% if errorlevel 1 SET ERR=Y ) else ( LINK.EXE /RELEASE @%W%\L_%PP%.TXT >> %OCMD% if errorlevel 1 SET ERR=Y ) :err if %ERR%==Y goto Notepad rem --------------------------- Copy EXE to project if not exist %OU% md %OU% > nul if exist %W%\%PP%.EXE copy %W%\%PP%.EXE %OU%\%NEXE%.exe > nul if exist %W%\%PP%.EXE del %W%\%PP%.EXE > nul goto e rem ---------------------- Start Notepad for error view :Notepad %BK%\BIN\prj.exe /r .\%OCMD% %NINI% %NSEC% * rem Start %NPAD% .\%OCMD% goto e rem ---------------------- Compile obj for lib selected project :Obj if %2.==. goto ObjEnd SET ERO=N for %%i in ( %2 ) Do SET PO=%%~ni for %%i in ( %2 ) Do SET EO=%%~xi if not %EO%==.tmp goto ObjEnd if exist %C%\%PO%.obj del %C%\%PO%.obj > nul HARBOUR.EXE %HL% -i%INCLUDE% -o%C%\ @%C%\%PO%.tmp 2>> %OCMD% if errorlevel 1 SET ERO=Y if %ERO%==Y goto ObjEnd if exist %C%\%PO%.tmp del %C%\%PO%.tmp > nul cl.exe /TC %C%\%PO%.c %CL% /Fp%C%\%PO%.pch /Fo%C%\ /Fd /c >> %OCMD% if errorlevel 1 SET ERO=Y if %ERO%==Y goto ObjEnd :ObjEnd if %ERO%==Y SET ERR=Y goto e :e [/pre2] т.е. моя прогр. ведения проектов (пояснение к содержимому cmd) 0. создает переменные среды _hbSets.cmd для тек. проекта [pre2]SET ERR=N SET NPAD=\BK19\BIN\Notepad2.exe SET NEXE=_ealarm SET NINI=_bk32.ini SET NSEC=01 SET OU=.\INF SET P=.\PRG\_ealarm SET W=.\WRK SET O=.\C SET C=.\C SET R=.\RES [/pre2] 1. создает список prg для сборки, сравнивая дату, время prg и obj (после сборки дату, время от prg ставим obj), компиляция идет по одному prg -> obj, при ошибке процесс прерывается. Список создается созданием файла %C%\%PO%.tmp, где %PO% имя prg\obj для команды for %%d in ( %C%\*.tmp ) Do Call %0 O %%d 2. создает файл со списком всех obj исключая prg\obj, содержащий Main 3. по этому списку создается lib тек. проекта 4. из ini создается файл списка используемых либ + полученная lib тек. проекта 5. в итоге собираем из obj, содержащий Main + lib + res модуль 6. при ошибке -> запуск модуля просмотра протокола с возможностью правки prg

alkresin: > 0. создает переменные среды _hbSets.cmd для тек. проекта Поскольку эти переменные используются дальше в вашей системе сборки, то при использовании hwbuilder в таком виде они не понадобятся. Некоторые из них заменяются аналогами в файле проекта: srcpath - путь к исходникам (его можно указывать несколько раз и после каждого - соответствующую группу файлов), outpath - где поместить результат, outname - имя собранного файла, objpath - путь к obj (там же будут лежать и .c, получившиеся в результате компиляции prg). > 1. создает список prg для сборки, сравнивая дату, время prg и obj (после сборки дату, время от prg ставим obj), компиляция идет по одному prg -> obj, при ошибке процесс прерывается. Список создается созданием файла %C%\%PO%.tmp, где %PO% имя prg\obj для команды for %%d in ( %C%\*.tmp ) Do Call %0 O %%d > 2. создает файл со списком всех obj исключая prg\obj, содержащий Main Все это делает сам hwbuilder, если задан makemode=on, сверяет даты создания prg, c, obj, компилирует только те, что надо. > 3. по этому списку создается lib тек. проекта > 4. из ini создается файл списка используемых либ + полученная lib тек. проекта Не понял, зачем создавать промежуточную lib, почему не собрать exe прямо из obj. Но, если надо, это можно сделать, указав в файле проекта 2 подпроекта (:project). В первом создать lib, во втором - указать эту lib в строке libs=... > 5. в итоге собираем из obj, содержащий Main + lib + res модуль Это то, чем и занимается hwbuilder > 6. при ошибке -> запуск модуля просмотра протокола с возможностью правки prg hwbc, как я писал, просто выводит результат в консоль ( или в файл, если в командной строке указать >result.txt. hwb запускает свой модуль просмотра.

SergKis: alkresin пишет Не понял, зачем создавать промежуточную lib, почему не собрать exe прямо из obj 1. это упрощает сборку проектов под любым компилятором, т.е. все сводится к схеме main.obj+lib+res 2. в большом, связанном проекте (к примеру, допустим, что в представленном выше ini проекты связаны) lib 1-го используется во 2-м, а в 3-м используются обе lib из 1,2 проектов + своя и + имеем 3-и рабочих модуля. Любая из этих lib может использоваться в других проектах (др. ini) hwb запускает свой модуль просмотра. как запустить свой ? В cmd файле выше это строки [pre2]rem ---------------------- Start Notepad for error view :Notepad %BK%\BIN\prj.exe /r .\%OCMD% %NINI% %NSEC% * rem Start %NPAD% .\%OCMD% goto e[/pre2] Но, если надо, это можно сделать, указав в файле проекта 2 подпроекта (:project). В первом создать lib, во втором - указать эту lib в строке libs=... т.е. делаем два запуска последовательно hwb.exe <1.hwprj> <options> if errorlevel 1 goto err hwb.exe <2.hwprj> <options> if errorlevel 1 goto err или как то иначе ?

alkresin: > как запустить свой ? Будет в следующей версии сегодня-завтра. > т.е. делаем два запуска последовательно ... Нет, только один. Эти подпроекты находятся в одном hwprj и выполняются последовательно при одном запуске. Выше объявления подпроекта указываются опции, общие для всех подпроектов. makemode=on objpath=obj :project mylib outpath=... outname=... srcpath=... ... :project myexe libs=... outname=... srcpath=... ...

SergKis: alkresin пишет Нет, только один. Эти подпроекты находятся в одном hwprj и выполняются последовательно при одном запуске. Вот оно как, Михалыч !(с) Из описания на сайте этого не понял. Спасибо за пояснения. А как с обработкой ошибок во время выполнения последовательного процесса ? т.е. ошибки файла проекта hwprj + сборки Как с синтаксисом ? libs= ... ... или libs=... libs=... libs=... или libs=@<file.txt> или libs= @<file.txt> так можно задавать ? Не понял как задать список конкретных obj для сборки lib ? Сейчас есть файл такой [pre2] .\C\letofunc.obj .\C\listfunc.obj .\C\setsdata.obj .\C\tsb_xml2xls.obj [/pre2] т.е. выполнить команду lib.exe /OUT:%C%\%PP%.lib @%W%\o_%PP%.txt > nul libs дополнительные библиотеки, указываются через пробел и без расширений Без расширений это не есть хорошо. Сейчас для сборки в bat файлах идут с расширениями, а это надо править у себя ..., т.к. @<file> для применения все с расширениями obj и lib. Надо бы и так и так задавть\обрабатывать. Сейчас файл такой по содержанию \BK19\OBJ\ErrSysHMG_.obj .\C\_ealarm.obj \BK19\OBJ\MapFile.obj kernel32.lib user32.lib ... legacy_stdio_definitions.lib xhb.lib hbpcre.lib .\C\_ealarm.lib

alkresin: > А как с обработкой ошибок При обнаружении ошибки в файле проекта или в командной строке вызова hwb выдается соответствующее сообщение и сборка прекращается. При ошибке компиляции/сборки процесс не останавливается, все ошибки будут в тексте, который по итогам сборки выдается в окно или на консоль. > Как с синтаксисом ? libs=lib1 lib2 ... или @mylibs.txt а в mylibs.txt - "libs=lib1 lib2 ..." > как задать список конкретных obj для сборки lib target=lib ... .\C\letofunc.obj .\C\listfunc.obj .\C\setsdata.obj .\C\tsb_xml2xls.obj "target=lib" является признаком, по которому hwbuilder будет собирать именно библиотеку, а не exe. Он сам выполнит нужную команду, в зависимости от С компилятора. > Без расширений это не есть хорошо Дело в том, что у разных компиляторов - разные расширения, а один файл проекта может использоваться с разными компиляторами. Юольше того, у mingw, например, ставится lib перед именем библиотеки. > ... kernel32.lib user32.lib Вот эти можно не указывать, системные библиотеки подключаются автоматически, в зависимости от компилятора. В той версии, которая будет сегодня/завтра, появится еще строка в ini def_syslibs=, где можно будет корректировать этот список.

alkresin: Выложил новую версию, 1.6 Появились строчки в ini, секции [VIEW]: ; Прогресс-бар включен progressbar=On ; внешняя программа для просмотра результатов сборки extview= В секции для компилятора добавил строчку def_syslibs=... Там программа автоматом проставит системные библиотеки, подключаемые при сборке - этот список можно отредактировать. Обновлен прогрессбар - вместо стандартного сделал свой, из DRAWN.

SergKis: alkresin пишет libs=lib1 lib2 ... или @mylibs.txt а в mylibs.txt - "libs=lib1 lib2 ..." т.е. libs=@mylibs.txt нельзя и libs=@my.txt где my.txt = "\BK19\OBJ\ErrSysHMG_.obj .\C\_ealarm.obj \BK19\OBJ\MapFile.obj .\C\_ealarm.lib" тоже, ok! Дело в том, что у разных компиляторов - разные расширения, а один файл проекта может использоваться с разными компиляторами Думал обойдусь заменой вызова в cmd файле, т.е. _hb_.cmd такой (хотел подменить вызов не трогая программу) @if exist \BK19\BIN\hb19.cmd Call \BK19\BIN\hb19.cmd %1 %2 %3 %4 %5 %6 %7 %8 но не получится.Остаюсь на своих bat, cmd файлах, править разные версии своих программ ведения проектов (работают программы), от hb 2.0 с bcc55, vc2008,9,2017,2019 и заменить на новое - не реально, да и смысла нет, т.к. сейчас все везде одинаково. Для тек. hmg, мне достаточно, то что есть в поставке. Спасибо за объяснения



полная версия страницы