FreeBasic
Главная
Вход
Регистрация
Среда, 29.10.2025, 19:23Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Генератор Makefile
zamabuvaraeuДата: Вторник, 21.10.2025, 18:16 | Сообщение # 1
Полковник
Группа: Друзья
Сообщений: 173
Репутация: 5
Статус: Offline
Когда мне стало лень писать миллионы файлов build.cmd для сборки проекта, я решил автоматизировать этот процесс. Под руку попалась утилита make, и теперь можно автоматически создавать Makefile для неё.

Преимущества:
1. Изменили всего одну строку в файле в проекте — не нужно пересобирать остальные сотни файлов.
2. Можно избавиться от рантайма в проекте.
3. Как следствие удаления рантайма — используя прямые вызовы ОС, проект можно собрать и для Win95. С рантаймом нельзя.
4. Следствие использования утилиты make — сборка проекта в несколько потоков (ускорение).

Что делать:
1. Скачиваем mingw, например, отсюда https://github.com/brechtsanders/winlibs_mingw/releases Жмём «Assets», появится список архивов. Заодно получим 64-битный отладчик GDB.
2. Компилируем Генератор.
3. Запускаем генератор.
4. Правим и запускаем setenv.cmd.
5. Готово.

Для линукса пока не работает. Работа ведётся.

Подробности тут: https://github.com/zamabuv....ault.md
Исходный код генератора: https://github.com/zamabuv....ile.bas

Пожелания, предложения, вопросы и ответы приветствуются.
 
haavДата: Вторник, 21.10.2025, 20:37 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1436
Репутация: 50
Статус: Offline
Судя по описанию , хорошая утилита. Потом попробую. Спасибо!

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
DarkDemonДата: Среда, 22.10.2025, 05:20 | Сообщение # 3
Генерал-майор
Группа: Друзья
Сообщений: 261
Репутация: -1
Статус: Offline
Думаю кому-то точно пригодится, сейчас мода на эти утилиты сборки. У меня нет таких масштабных проектов,
которые компилятся несколько секунд, поэтому собираю бинарники в IDE.
 
haavДата: Среда, 22.10.2025, 06:40 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1436
Репутация: 50
Статус: Offline
С пробелами беда?


Цитата
> CreateMakefile createdirs

"C:\Program Files (x86)\FreeBASIC-1.10.1-winlibs-gcc-9.3.0\fbc64.exe" -gen gcc
d WINVER=1281 -d _WIN32_WINNT=1281 -s console -w error -maxerr 1 -O 0 -r -showi
cludes -m a -i src src\main.bas

"C:\Program" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Так же есть вопрос по утилите:

в описании сказано , что библиотеки надо добавлять вручную. То есть я не могу создать проект с рантаймом по умолчанию и воспользоваться утилитой , чтобы она мне создала валидный makefile? Скажем я создаю проект, там у меня 2 файла BAS и 2 BI. Мне надо самому включать в makefile все эти libfbgfx.a и пр. ?  И про виндовые библиотеки судя по всему та же песня? Многие любят включить банально виндовый заголовок и этого достаточно для компиляции гуишного приложения.

Было бы неплохо данную утилиту сделать универсальной , чтобы она могла создавать проекты makefiles без рантайма и с рантаймом


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Среда, 22.10.2025, 08:13 | Сообщение # 5
Полковник
Группа: Друзья
Сообщений: 173
Репутация: 5
Статус: Offline

Цитата
С пробелами беда?

Это не с пробелами беда, это фрибесик не существует по указанному пути.

В чём проблема?
Я запускаю дочерний процесс "Open Pipe(ProgramName, For Input, As FileNumber)" и читаю его ввод и вывод, а когда файл не существует — сишный рантайм вместо того чтобы выдавать код ошибки выводит сообщение в консоль. (Мне что, парсить собственный консольный ввод‐вывод, чтобы получить код ошибки, что ли. Негодую.)
Это неизлечимо.
(Ну да, а ещё негодую по поводу невозможности получения кода завершения дочернего процесса. Вместо того чтобы драться с рантаймом, проще выкинуть весь этот рантайм и вызывать функции операционной системы напрямую.)


Цитата
> CreateMakefile createdirs


Команду createdirs нужно отправлять в утилиту make. Дополнил этот кусок в документации.


Цитата
в описании сказано , что библиотеки надо добавлять вручную
В текущей реализации так.
И это может представлять определённую проблему.

Впрочем, всякие стандартные WinAPI уже добавлены (см. файл setenv.cmd с параметрами LIBS_WIN95, LIBS_WINNT).
Стандартная бибилиотека фрибесика libfb тоже есть.
Графическую fbgfx добавляем вручную.

Зачем так сделано?
Чтобы узнать какие библиотеки добавлять, нужно парсить исходные файлы и все заголовочники, на которые они ссылаются. В случае какой‐нибудь #include "windows.bi" это сотни файлов. А ещё библиотека может включаться или выключаться в зависимости от какой‐нибудь хитрой дефуне. Это значит нужно создать компилятор, который бы разруливал дефуниции и список библиотек.
Вот заголовочники получить можно через -showincludes, а подключаемые библиотеки нет.
А ещё подключаемые библиотеки могут вообще не упоминаться в исходном коде, например, есть какой‐нибудь ScreenRes, а inclib fbgfx — нету. Как узнать какая библиотека нужна? Это сложно.

Возможно потом что‐нибудь придумаю.
 
haavДата: Среда, 22.10.2025, 10:58 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 1436
Репутация: 50
Статус: Offline
Че-то нифига не получается , возможно где-то туплю. Даже директории не создаются. Заходит в директорию , далее команда mkdir запускается и ошибок не выводит (пустая строка в выводе). Специально создал каталог без пробелов и кириллицы. 
За "5 минут" тут не разобраться , потом как-нибудь.

P.S. GUI бы может облегчил задачу по установке путей , и пр. Типа указать путь к компилятору , потом к каталогу make , добавлять библиотеки. Чтобы это все не делать в текстовом файле , разыскивая куда и что надо прописывать.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
haavДата: Пятница, 24.10.2025, 05:42 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 1436
Репутация: 50
Статус: Offline
В каталоге src создал файлы main.bas , main.bi , 1.bi , 2.bi
Запустил CreateMakefile , получил 2 файла setenv.cmd , makefile
Пытался создать каталоги , используя make createdirs ,но каталоги из под MAKE не создаются. Я создал их вручную. 
Далее правлю пути и запускаю setenv.cmd , тут вроде без ошибок
Далее запускаю make all , но компиляция безуспешная. Судя по всему , makefile не валидный , потому как не содержит имен файлов и зависимостей. И как итог:


Цитата
C:\mingw32\home\user\1234>"C:\mingw32\usr\bin\make.exe" all
"C:\FB\bin\win32\gcc.exe" -Wl,--subsystem,console -Wl,-
no-seh -Wl,--nxcompat -Wl,--stack 2097152,2097152 -pipe -nostdlib -L . -L "C:\FB\lib\win32" -T "C:\FB\lib\win32
fbextra.x" -s -Wl,--gc-sections "C:\FB\lib\win32\crt2.o
"C:\FB\lib\win32\crtbegin.o" "C:\FB\lib\win32\fbrt0.o" obj/Release/x86/ -Wl,--start-group -ladvapi32 -lcomctl3
-lcomdlg32 -lcrypt32 -lgdi32 -lkernel32 -lole32 -loleaut32 -lshell32 -lshlwapi
-lwsock32 -luser32 -lgdiplus -lws2_32 -lmswsock -luuid -lmsvcrt -lfb  -Wl,--end
group "C:\FB\lib\win32\crtend.o" -o bin/Release/x86/a.e
e
gcc.exe: error: 2097152,2097152: No such file or directory
make: *** [Makefile:216: bin/Release/x86/a.exe] Error 1


Так же имея нужные каталоги и файлы , пробовал пересоздавать makefile , но ничего путного не получилось.
Все это я тестил на Win7 32-bit.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Пятница, 24.10.2025, 07:53 | Сообщение # 8
Полковник
Группа: Друзья
Сообщений: 173
Репутация: 5
Статус: Offline
А какой он Makefile создаёт?
 
haavДата: Пятница, 24.10.2025, 08:11 | Сообщение # 9
Генералиссимус
Группа: Администраторы
Сообщений: 1436
Репутация: 50
Статус: Offline

Код
.PHONY: all debug release clean createdirs 
 
all: release debug 
 
# Legends: 
# $@ - target name 
# $^ - set of dependent files 
# $< - name of first dependency 
# % - pattern 
# $* - variable pattern 
 
FBC ?= fbc.exe 
CC ?= gcc.exe 
AS ?= as.exe 
AR ?= ar.exe 
GORC ?= GoRC.exe 
LD ?= ld.exe 
DLL_TOOL ?= dlltool.exe 
LIB_DIR ?= 
INC_DIR ?= 
LD_SCRIPT ?= 
 
TARGET_TRIPLET ?= 
MARCH ?= i686 
 
USE_RUNTIME ?= TRUE 
FBC_VER ?= _FBC1101 
GCC_VER ?= _GCC0930 
ifeq ($(USE_RUNTIME),TRUE) 
RUNTIME = _RT 
else 
RUNTIME = _WRT 
endif 
OUTPUT_FILE_NAME ?= a$(FILE_SUFFIX).exe 
 
PATH_SEP ?= / 
MOVE_PATH_SEP ?= \\ 
 
MOVE_COMMAND ?= cmd.exe /c move /y 
DELETE_COMMAND ?= cmd.exe /c del /f /q 
MKDIR_COMMAND ?= cmd.exe /c mkdir 
CPREPROCESSOR_COMMAND ?= cmd.exe /c echo cscript.exe //nologo fix-emitted-code.vbs 
 
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) 
BIN_DEBUG_DIR ?= bin$(PATH_SEP)Debug$(PATH_SEP)x64 
BIN_RELEASE_DIR ?= bin$(PATH_SEP)Release$(PATH_SEP)x64 
OBJ_DEBUG_DIR ?= obj$(PATH_SEP)Debug$(PATH_SEP)x64 
OBJ_RELEASE_DIR ?= obj$(PATH_SEP)Release$(PATH_SEP)x64 
BIN_DEBUG_DIR_MOVE ?= bin$(MOVE_PATH_SEP)Debug$(MOVE_PATH_SEP)x64 
BIN_RELEASE_DIR_MOVE ?= bin$(MOVE_PATH_SEP)Release$(MOVE_PATH_SEP)x64 
OBJ_DEBUG_DIR_MOVE ?= obj$(MOVE_PATH_SEP)Debug$(MOVE_PATH_SEP)x64 
OBJ_RELEASE_DIR_MOVE ?= obj$(MOVE_PATH_SEP)Release$(MOVE_PATH_SEP)x64 
else 
BIN_DEBUG_DIR ?= bin$(PATH_SEP)Debug$(PATH_SEP)x86 
BIN_RELEASE_DIR ?= bin$(PATH_SEP)Release$(PATH_SEP)x86 
OBJ_DEBUG_DIR ?= obj$(PATH_SEP)Debug$(PATH_SEP)x86 
OBJ_RELEASE_DIR ?= obj$(PATH_SEP)Release$(PATH_SEP)x86 
BIN_DEBUG_DIR_MOVE ?= bin$(MOVE_PATH_SEP)Debug$(MOVE_PATH_SEP)x86 
BIN_RELEASE_DIR_MOVE ?= bin$(MOVE_PATH_SEP)Release$(MOVE_PATH_SEP)x86 
OBJ_DEBUG_DIR_MOVE ?= obj$(MOVE_PATH_SEP)Debug$(MOVE_PATH_SEP)x86 
OBJ_RELEASE_DIR_MOVE ?= obj$(MOVE_PATH_SEP)Release$(MOVE_PATH_SEP)x86 
endif 
 
FBCFLAGS+=-gen gcc 
ifeq ($(USE_UNICODE),TRUE) 
FBCFLAGS+=-d UNICODE 
FBCFLAGS+=-d _UNICODE 
endif 
FBCFLAGS+=-d WINVER=$(WINVER) 
FBCFLAGS+=-d _WIN32_WINNT=$(_WIN32_WINNT) 
FBCFLAGS+=-m a 
ifeq ($(USE_RUNTIME),TRUE) 
else 
FBCFLAGS+=-d WITHOUT_RUNTIME 
endif 
FBCFLAGS+=-w error -maxerr 1 
ifneq ($(INC_DIR),) 
FBCFLAGS+=-i "$(INC_DIR)" 
endif 
FBCFLAGS+=-i src 
FBCFLAGS+=-r 
FBCFLAGS+=-s console 
FBCFLAGS+=-O 0 
FBCFLAGS_DEBUG+=-g 
debug: FBCFLAGS+=$(FBCFLAGS_DEBUG) 
 
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) 
CFLAGS+=-m64 
else 
CFLAGS+=-m32 
endif 
CFLAGS+=-march=$(MARCH) 
CFLAGS+=-pipe 
CFLAGS+=-Wno-unused-label -Wno-unused-function 
CFLAGS+=-Wno-unused-parameter -Wno-unused-variable 
CFLAGS+=-Wno-dollar-in-identifier-extension 
CFLAGS+=-Wno-language-extension-token 
CFLAGS+=-Wno-parentheses-equality 
CFLAGS_DEBUG+=-g -O0 
release: CFLAGS+=$(CFLAGS_RELEASE) 
release: CFLAGS+=-fno-math-errno -fno-exceptions 
release: CFLAGS+=-fno-unwind-tables -fno-asynchronous-unwind-tables 
release: CFLAGS+=-O3 -fno-ident -fdata-sections -ffunction-sections 
ifneq ($(FLTO),) 
release: CFLAGS+=-flto 
endif 
debug: CFLAGS+=$(CFLAGS_DEBUG) 
 
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) 
ASFLAGS+=--64 
else 
ASFLAGS+=--32 
endif 
ASFLAGS_DEBUG+= 
release: ASFLAGS+=--strip-local-absolute 
debug: ASFLAGS+=$(ASFLAGS_DEBUG) 
 
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) 
GORCFLAGS+=/machine X64 
endif 
GORCFLAGS+=/ni /o /d FROM_MAKEFILE 
GORCFLAGS_DEBUG=/d DEBUG 
debug: GORCFLAGS+=$(GORCFLAGS_DEBUG) 
 
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) 
else 
endif 
LDFLAGS+=-Wl,--subsystem,console 
LDFLAGS+=-Wl,--no-seh -Wl,--nxcompat 
ifeq ($(USE_RUNTIME),TRUE) 
LDFLAGS+=-Wl,--stack 2097152,2097152 
endif 
LDFLAGS+=-pipe -nostdlib 
LDFLAGS+=-L . 
LDFLAGS+=-L "$(LIB_DIR)" 
ifneq ($(LD_SCRIPT),) 
LDFLAGS+=-T "$(LD_SCRIPT)" 
endif 
release: LDFLAGS+=-s -Wl,--gc-sections 
ifneq ($(FLTO),) 
release: LDFLAGS+=-flto 
endif 
debug: LDFLAGS+=$(LDFLAGS_DEBUG) 
debug: LDLIBS+=$(LDLIBS_DEBUG) 
 
ifeq ($(USE_RUNTIME),TRUE) 
ifeq ($(OBJ_CRT_START),) 
LDLIBSBEGIN+="$(LIB_DIR)\crt2.o" 
LDLIBSBEGIN+="$(LIB_DIR)\crtbegin.o" 
LDLIBSBEGIN+="$(LIB_DIR)\fbrt0.o" 
else 
LDLIBSBEGIN+=$(OBJ_CRT_START) 
endif 
endif 
 
LDLIBS+=-Wl,--start-group 
ifeq ($(LIBS_OS),) 
LDLIBS+=-ladvapi32 -lcomctl32 -lcomdlg32 -lcrypt32 
LDLIBS+=-lgdi32 -lgdiplus -lkernel32 -lmswsock 
LDLIBS+=-lole32 -loleaut32 -lshell32 -lshlwapi 
LDLIBS+=-lwsock32 -lws2_32 -luser32 -luuid 
LDLIBS+=-lmsvcrt 
ifeq ($(USE_RUNTIME),TRUE) 
LDLIBS+=-lfb 
LDLIBS+=-lgcc -lmingw32 -lmingwex -lmoldname -lgcc_eh 
endif 
else 
LDLIBS+=$(LIBS_OS) 
endif 
LDLIBS+=-Wl,--end-group 
 
ifeq ($(LIBS_GCC),) 
LDLIBS_DEBUG+=-lgcc -lmingw32 -lmingwex -lmoldname -lgcc_eh 
else 
LDLIBS_DEBUG+=$(LIBS_GCC) 
endif 
 
ifeq ($(USE_RUNTIME),TRUE) 
ifeq ($(OBJ_CRT_END),) 
LDLIBSEND+="$(LIB_DIR)\crtend.o" 
else 
LDLIBSEND+=$(OBJ_CRT_END) 
endif 
endif 
 
OBJECTFILES_DEBUG+=$(OBJ_DEBUG_DIR)$(PATH_SEP) 
OBJECTFILES_RELEASE+=$(OBJ_RELEASE_DIR)$(PATH_SEP) 
 
$(OBJ_DEBUG_DIR)$(PATH_SEP):  
$(OBJ_RELEASE_DIR)$(PATH_SEP):  
 
 
release: $(BIN_RELEASE_DIR)$(PATH_SEP)$(OUTPUT_FILE_NAME) 
 
debug: $(BIN_DEBUG_DIR)$(PATH_SEP)$(OUTPUT_FILE_NAME) 
 
clean: 
    $(DELETE_COMMAND) $(OBJ_RELEASE_DIR_MOVE)$(MOVE_PATH_SEP)*$(FILE_SUFFIX).c 
    $(DELETE_COMMAND) $(OBJ_DEBUG_DIR_MOVE)$(MOVE_PATH_SEP)*$(FILE_SUFFIX).c 
    $(DELETE_COMMAND) $(OBJ_RELEASE_DIR_MOVE)$(MOVE_PATH_SEP)*$(FILE_SUFFIX).asm 
    $(DELETE_COMMAND) $(OBJ_DEBUG_DIR_MOVE)$(MOVE_PATH_SEP)*$(FILE_SUFFIX).asm 
    $(DELETE_COMMAND) $(OBJ_RELEASE_DIR_MOVE)$(MOVE_PATH_SEP)*$(FILE_SUFFIX).o 
    $(DELETE_COMMAND) $(OBJ_DEBUG_DIR_MOVE)$(MOVE_PATH_SEP)*$(FILE_SUFFIX).o 
    $(DELETE_COMMAND) $(OBJ_RELEASE_DIR_MOVE)$(MOVE_PATH_SEP)*$(FILE_SUFFIX).obj 
    $(DELETE_COMMAND) $(OBJ_DEBUG_DIR_MOVE)$(MOVE_PATH_SEP)*$(FILE_SUFFIX).obj 
    $(DELETE_COMMAND) $(BIN_RELEASE_DIR_MOVE)$(MOVE_PATH_SEP)$(OUTPUT_FILE_NAME) 
    $(DELETE_COMMAND) $(BIN_DEBUG_DIR_MOVE)$(MOVE_PATH_SEP)$(OUTPUT_FILE_NAME) 
 
createdirs: 
    $(MKDIR_COMMAND) $(BIN_DEBUG_DIR_MOVE) 
    $(MKDIR_COMMAND) $(BIN_RELEASE_DIR_MOVE) 
    $(MKDIR_COMMAND) $(OBJ_DEBUG_DIR_MOVE) 
    $(MKDIR_COMMAND) $(OBJ_RELEASE_DIR_MOVE) 
 
$(BIN_RELEASE_DIR)$(PATH_SEP)$(OUTPUT_FILE_NAME): $(OBJECTFILES_RELEASE) 
    $(CC) $(LDFLAGS) $(LDLIBSBEGIN) $^ $(LDLIBS) $(LDLIBSEND) -o $@ 
 
$(BIN_DEBUG_DIR)$(PATH_SEP)$(OUTPUT_FILE_NAME): $(OBJECTFILES_DEBUG) 
    $(CC) $(LDFLAGS) $(LDLIBSBEGIN) $^ $(LDLIBS) $(LDLIBSEND) -o $@ 
 
$(OBJ_RELEASE_DIR)$(PATH_SEP)%$(FILE_SUFFIX).o: $(OBJ_RELEASE_DIR)$(PATH_SEP)%$(FILE_SUFFIX).asm 
    $(AS) $(ASFLAGS) -o $@ $< 
 
$(OBJ_DEBUG_DIR)$(PATH_SEP)%$(FILE_SUFFIX).o: $(OBJ_DEBUG_DIR)$(PATH_SEP)%$(FILE_SUFFIX).asm 
    $(AS) $(ASFLAGS) -o $@ $< 
 
$(OBJ_RELEASE_DIR)$(PATH_SEP)%$(FILE_SUFFIX).asm: $(OBJ_RELEASE_DIR)$(PATH_SEP)%$(FILE_SUFFIX).c 
    $(CC) $(EXTRA_CFLAGS) $(CFLAGS) -o $@ $< 
 
$(OBJ_DEBUG_DIR)$(PATH_SEP)%$(FILE_SUFFIX).asm: $(OBJ_DEBUG_DIR)$(PATH_SEP)%$(FILE_SUFFIX).c 
    $(CC) $(EXTRA_CFLAGS) $(CFLAGS) -o $@ $< 
 
$(OBJ_RELEASE_DIR)$(PATH_SEP)%$(FILE_SUFFIX).c: src$(PATH_SEP)%.bas 
    $(FBC) $(FBCFLAGS) $< 
    $(CPREPROCESSOR_COMMAND) /release src$(MOVE_PATH_SEP)$*.c 
    $(MOVE_COMMAND) src$(MOVE_PATH_SEP)$*.c $(OBJ_RELEASE_DIR_MOVE)$(MOVE_PATH_SEP)$*$(FILE_SUFFIX).c 
 
$(OBJ_DEBUG_DIR)$(PATH_SEP)%$(FILE_SUFFIX).c: src$(PATH_SEP)%.bas 
    $(FBC) $(FBCFLAGS) $< 
    $(CPREPROCESSOR_COMMAND) /debug src$(MOVE_PATH_SEP)$*.c 
    $(MOVE_COMMAND) src$(MOVE_PATH_SEP)$*.c $(OBJ_DEBUG_DIR_MOVE)$(MOVE_PATH_SEP)$*$(FILE_SUFFIX).c 
 
$(OBJ_RELEASE_DIR)$(PATH_SEP)%$(FILE_SUFFIX).obj: src$(PATH_SEP)%.RC 
    $(GORC) $(GORCFLAGS) /fo $@ $< 
 
$(OBJ_DEBUG_DIR)$(PATH_SEP)%$(FILE_SUFFIX).obj: src$(PATH_SEP)%.RC 
    $(GORC) $(GORCFLAGS) /fo $@ $<
 


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Пятница, 24.10.2025, 12:12 | Сообщение # 10
Полковник
Группа: Друзья
Сообщений: 173
Репутация: 5
Статус: Offline
Значит генератор не нашёл исходников в каталоге src
 
haavДата: Пятница, 24.10.2025, 14:53 | Сообщение # 11
Генералиссимус
Группа: Администраторы
Сообщений: 1436
Репутация: 50
Статус: Offline
Цитата zamabuvaraeu ()
Значит генератор не нашёл исходников в каталоге src

Судя по всему , на твоей системе это работает. Но если каталоги отличаются , то будет как у меня (то есть нифига не будет работать). Зачем намертво зашиты пути в файле CreateMakefile.bas ? Если я меняю в этом файле пути на свои , то как минимум уже что-то находит. Как должна выполняться команда fbc -showincludes в файле CreateMakefile , если прописан твой путь к компилятору? Потом возникает проблема с fix-emitted-code.vbs и make выходит с ошибкой.
И потом , из под make не создаются каталоги. Может их лучше создавать сразу из программы CreateMakefile.exe?
В общем , программа требует тщательного тестирования, а пока это не работает.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Пятница, 24.10.2025, 20:57 | Сообщение # 12
Полковник
Группа: Друзья
Сообщений: 173
Репутация: 5
Статус: Offline
Обновил генератор (скачайте новую версию) и сделал небольшое видео
https://rutube.ru/video....5rv8YYA


Цитата
Зачем намертво зашиты пути в файле CreateMakefile.bas
Чтобы было так: если не указан путь в параметре — пусть будет тот путь, что по умолчанию.
Но если не нравится, то…
Теперь удалил. Теперь путь нужно будет указывать всегда.


Цитата
Потом возникает проблема с fix-emitted-code.vbs
Он выключен по умолчанию. Если включено, то устанавливаем «-fix false».
Какая ошибка вызывается?


Цитата
из под make не создаются каталоги
Какую ошибку показывает?

Цитата
Может их лучше создавать сразу из программы CreateMakefile.exe?
Ну, добавил параметр -createdirs true
 
haavДата: Суббота, 25.10.2025, 05:49 | Сообщение # 13
Генералиссимус
Группа: Администраторы
Сообщений: 1436
Репутация: 50
Статус: Offline
Я использовал make (не mingw32-make). Отсюда и вырастали все проблемы. Нашел в своих папках mingw32-make, с ней вроде собирается. Даже не думал , что make будет так косячить с твоей программой. Всегда ей пользовался для любых нужд... Каких только ошибок не насмотрелся , пока использовал стандартную make из поставки Mingw32 с твоей программой. Вот например:

Код
cmd.exe /c echo cscript.exe //nologo fix-emitted-code.vbs /release src\\main.c
"elease" не является внутренней или внешней


Или такая:

Код
Makefile:231: *** target pattern contains no '%'.  Stop.


Хорошо , что теперь пашет. И извини , я спорол косяка и зря тебе морочил голову.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
  • Страница 1 из 1
  • 1
Поиск: