On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
moderator


Пост N: 1552
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 05.12.23 14:33. Заголовок: HwBuilder


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

На сайте - бинарники. Исходники - в комплекте HwGUI (пока на SVN).

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 28 , стр: 1 2 All [только новые]


постоянный участник




Пост N: 4473
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.12.23 11:31. Заголовок: alkresin пишет Обнов..


alkresin пишет
 цитата:
Обновил бинарники на сайте, теперь это версия 1.5


Что то не оч. понимаю, как реализовать на hwBuilder схему работы cmd файла из ini проекта, указанного выше
CmdComp=_hb_.cmd Его содержимое Скрытый текст

т.е. моя прогр. ведения проектов (пояснение к содержимому cmd)
0. создает переменные среды _hbSets.cmd для тек. проекта Скрытый текст

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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1567
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 21.12.23 13:24. Заголовок: > 0. создает пер..


> 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 запускает свой модуль просмотра.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4474
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.12.23 14:00. Заголовок: alkresin пишет Не по..


alkresin пишет
 цитата:
Не понял, зачем создавать промежуточную lib, почему не собрать exe прямо из obj


1. это упрощает сборку проектов под любым компилятором, т.е. все сводится к схеме main.obj+lib+res
2. в большом, связанном проекте (к примеру, допустим, что в представленном выше ini проекты связаны) lib 1-го используется во 2-м, а в 3-м используются обе lib из 1,2 проектов + своя и + имеем 3-и рабочих модуля. Любая из этих lib может использоваться в других проектах (др. ini)

 цитата:
hwb запускает свой модуль просмотра.


как запустить свой ? В cmd файле выше это строки
rem ---------------------- Start Notepad for error view 
:Notepad
%BK%\BIN\prj.exe /r .\%OCMD% %NINI% %NSEC% *
rem Start %NPAD% .\%OCMD%
goto e


 цитата:
Но, если надо, это можно сделать, указав в файле проекта 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
или как то иначе ?

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1568
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 21.12.23 14:10. Заголовок: > как запустить ..


> как запустить свой ?

Будет в следующей версии сегодня-завтра.

> т.е. делаем два запуска последовательно ...

Нет, только один. Эти подпроекты находятся в одном hwprj и выполняются последовательно при одном запуске. Выше объявления подпроекта указываются опции, общие для всех подпроектов.

makemode=on
objpath=obj

:project mylib

outpath=...
outname=...
srcpath=...
...
:project myexe

libs=...
outname=...
srcpath=...
...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4475
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.12.23 14:32. Заголовок: alkresin пишет Нет, ..


alkresin пишет
 цитата:
Нет, только один. Эти подпроекты находятся в одном hwprj и выполняются последовательно при одном запуске.


Вот оно как, Михалыч !(с) Из описания на сайте этого не понял. Спасибо за пояснения.
А как с обработкой ошибок во время выполнения последовательного процесса ? т.е. ошибки файла проекта hwprj + сборки
Как с синтаксисом ?
libs=
...
...
или
libs=...
libs=...
libs=...
или
libs=@<file.txt>
или
libs=
@<file.txt>

так можно задавать ?

Не понял как задать список конкретных obj для сборки lib ? Сейчас есть файл такой Скрытый текст

т.е. выполнить команду 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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1569
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 21.12.23 15:55. Заголовок: > А как с обрабо..


> А как с обработкой ошибок

При обнаружении ошибки в файле проекта или в командной строке вызова 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=, где можно будет корректировать этот список.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1570
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 21.12.23 16:18. Заголовок: Выложил новую версию..


Выложил новую версию, 1.6
Появились строчки в ini, секции [VIEW]:

; Прогресс-бар включен
progressbar=On
; внешняя программа для просмотра результатов сборки
extview=

В секции для компилятора добавил строчку

def_syslibs=...

Там программа автоматом проставит системные библиотеки, подключаемые при сборке - этот список можно отредактировать.
Обновлен прогрессбар - вместо стандартного сделал свой, из DRAWN.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4476
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.12.23 16:51. Заголовок: alkresin пишет libs=..


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, мне достаточно, то что есть в поставке.
Спасибо за объяснения

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 28 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 140
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет