Turgenev 1 13 февраля Опубликовано 13 февраля (изменено) · Жалоба Хочу научиться собирать проекты при помощи утилиты make. Для примера взял проект с гитхаба с уже написанным makefile: https://github.com/KerJoe/ORTD2662?tab=readme-ov-file Установил gcc-13.2.0-64.exe, создал переменную среды PATH и указал в ней путь до папки с make.exe. Проверяю поставилось ли: Спойлер d:\ORTD2662-master>make --version GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for i386-pc-mingw32 Запускаю утилиту make из папки, в которой находится makefile: Спойлер d:\ORTD2662-master>make gcc ./alien/adjust_.c -I. -MMD -ggdb3 -o output_native/adjust_.o -c process_begin: CreateProcess(NULL, gcc ./alien/adjust_.c -I. -MMD -ggdb3 -o output_native/adjust_.o -c, ...) failed. make (e=2): Не удается найти указанный файл. make: *** [output_native/adjust_.o] Ошибка 2 Пробую запустить с параметром -d, минуту получаю вывод отладочной информации такого типа: Спойлер Попытка применения правила с образцом, основа `adjust_'. Попытка применения неявной зависимости `adjust_.l'. Поиск правила с промежуточным файлом `adjust_.l'. Избежание рекурсивного вызова неявного правила. Попытка применения правила с образцом, основа `adjust_.l'. Попытка применения неявной зависимости `adjust_.l,v'. Попытка применения правила с образцом, основа `adjust_.l'. Попытка применения неявной зависимости `RCS/adjust_.l,v'. Попытка применения правила с образцом, основа `adjust_.l'. Попытка применения неявной зависимости `RCS/adjust_.l'. Попытка применения правила с образцом, основа `adjust_.l'. Попытка применения неявной зависимости `s.adjust_.l'. Попытка применения правила с образцом, основа `adjust_.l'. Попытка применения неявной зависимости `SCCS/s.adjust_.l'. Попытка применения правила с образцом, основа `adjust_'. Попытка применения неявной зависимости `adjust_.w'. Поиск правила с промежуточным файлом `adjust_.w'. Избежание рекурсивного вызова неявного правила. Попытка применения правила с образцом, основа `adjust_.w'. Попытка применения неявной зависимости `adjust_.w,v'. Попытка применения правила с образцом, основа `adjust_.w'. Попытка применения неявной зависимости `RCS/adjust_.w,v'. Попытка применения правила с образцом, основа `adjust_.w'. Попытка применения неявной зависимости `RCS/adjust_.w'. Попытка применения правила с образцом, основа `adjust_.w'. Попытка применения неявной зависимости `s.adjust_.w'. Попытка применения правила с образцом, основа `adjust_.w'. Попытка применения неявной зависимости `SCCS/s.adjust_.w'. Попытка применения правила с образцом, основа `adjust_'. Отвержение невозможной неявной зависимости `adjust_.w'. Не найдено неявного правила для `adjust_.c'. Обновление целей, от которых зависит целевой файл `adjust_.c', завершено. Нет необходимости пересобирать цель `adjust_.c'.; используется VPATH-имя `./alien/adjust_.c'. Обновление целей, от которых зависит целевой файл `output_native/adjust_.o', завершено. Необходимо пересобрать цель `output_native/adjust_.o'. gcc ./alien/adjust_.c -I. -MMD -ggdb3 -o output_native/adjust_.o -c CreateProcess(NULL,gcc ./alien/adjust_.c -I. -MMD -ggdb3 -o output_native/adjust_.o -c,...) process_begin: CreateProcess(NULL, gcc ./alien/adjust_.c -I. -MMD -ggdb3 -o output_native/adjust_.o -c, ...) failed. Помещение потомка 0x02a91728 (output_native/adjust_.o) PID 44860504 в цепочку активных потомков. Незавершенный потомок 0x02a91728 (output_native/adjust_.o) PID 44860504 Main thread handle = 0x000001f8 make (e=2): Не удается найти указанный файл. Подбираю неудачно завершившегося потомка 0x02a91728 PID 44860504 make: *** [output_native/adjust_.o] Ошибка 2 Removing child 0x02a91728 PID 44860504 from chain. Пробую запустить в visual studio 2022: Спойлер Сам makefile и его содержание: Makefile (в файле путь до утилиты изменен мною на верный) Спойлер ifeq ($(OS),Windows_NT) # Windows tools PATH:=C:\Program Files (x86)\GnuWin32\bin:${PATH} RMDIR = -cmd /C rd /S /Q # Ignore "cannot find the file" error EXEC = .exe else # POSIX tools RMDIR = rm -rf EXEC = endif # Add all subdirectories 1 level deep into make search path VPATH = $(wildcard ./*/) # Compile all .c files in directories SRCFILES := $(wildcard ./*/*.c) # File that has the main() function MAINFILE := core/main.c # PROGRAMMER := python3 ../RTDMultiProg/rtdmultiprog.py -i i2cdev -d 2 -w # Native compiler ifeq ($(OS),Windows_NT) # Windows tools NATIVE_PKGCFG = NATIVE_CC = gcc NATIVE_CFLAGS = -I. -MMD -ggdb3 NATIVE_LDFLAGS = -Lcore -lch341 NATIVE_OUTPUTDIR = output_native else NATIVE_PKGCFG = pkg-config NATIVE_CC = gcc NATIVE_CFLAGS = -I. -MMD -ggdb3 $(shell $(NATIVE_PKGCFG) --cflags python3-embed) NATIVE_LDFLAGS = $(shell $(NATIVE_PKGCFG) --libs python3-embed) NATIVE_OUTPUTDIR = output_native endif NATIVE_OBJFILES := $(addprefix $(NATIVE_OUTPUTDIR)/, $(notdir $(SRCFILES:.c=.o))) NATIVE_DFILES := $(addprefix $(NATIVE_OUTPUTDIR)/, $(notdir $(SRCFILES:.c=.d))) native: $(NATIVE_OUTPUTDIR) $(NATIVE_OUTPUTDIR)/native$(EXEC) $(NATIVE_OUTPUTDIR): mkdir $(NATIVE_OUTPUTDIR) $(NATIVE_OUTPUTDIR)/native$(EXEC): $(NATIVE_OBJFILES) $(NATIVE_CC) $^ $(NATIVE_CFLAGS) $(NATIVE_LDFLAGS) -o $@ $(NATIVE_OUTPUTDIR)/%.o: %.c $(NATIVE_CC) $< $(NATIVE_CFLAGS) -o $@ -c # Firmware compiler SDCC_CC = sdcc SDCC_CFLAGS = -I. -MMD --model-large --stack-auto SDCC_LDFLAGS = --xram-loc 0xFB00 --xram-size 640 SDCC_OUTPUTDIR = output # Remove _.c files SDCC_SRCFILES := $(filter-out %_.c, $(SRCFILES)) SDCC_RELFILES := $(addprefix $(SDCC_OUTPUTDIR)/, $(notdir $(SDCC_SRCFILES:.c=.rel))) SDCC_DFILES := $(addprefix $(SDCC_OUTPUTDIR)/, $(notdir $(SDCC_SRCFILES:.c=.d))) firmware: $(SDCC_OUTPUTDIR) $(SDCC_OUTPUTDIR)/firmware.bin $(SDCC_OUTPUTDIR): mkdir $(SDCC_OUTPUTDIR) $(SDCC_OUTPUTDIR)/firmware.hex: $(SDCC_RELFILES) $(SDCC_CC) $^ $(SDCC_CFLAGS) $(SDCC_LDFLAGS) -o $@ $(SDCC_OUTPUTDIR)/firmware.bin: $(SDCC_OUTPUTDIR)/firmware.hex makebin $(SDCC_OUTPUTDIR)/firmware.hex $(SDCC_OUTPUTDIR)/firmware.bin $(SDCC_OUTPUTDIR)/%.rel: %.c $(SDCC_CC) -o $@ -c $(SDCC_CFLAGS) $< all: native firmware program: $(SDCC_OUTPUTDIR)/firmware.bin $(PROGRAMMER) "$(CURDIR)/$(SDCC_OUTPUTDIR)/firmware.bin" clean: $(RMDIR) $(NATIVE_OUTPUTDIR) $(RMDIR) $(SDCC_OUTPUTDIR) # Include dependency target files -include $(NATIVE_DFILES) -include $(SDCC_DFILES) Не могли бы вы посоветовать что я делаю не так? Изменено 13 февраля пользователем Turgenev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 13 февраля Опубликовано 13 февраля · Жалоба Скажите, по какой причине вы запостили текст картинками? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 13 февраля Опубликовано 13 февраля · Жалоба Насколько я понимаю, не находит путь к тулчейну GCC. Видимо, он стоит не в C:\Program Files (x86)\GnuWin32\bin, как указано в первой строке make работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Turgenev 1 13 февраля Опубликовано 13 февраля · Жалоба 9 минут назад, andrew_b сказал: Скажите, по какой причине вы запостили текст картинками? Привычка. Исправил. Как копировать из консоли VS не знаю. 5 минут назад, MrYuran сказал: Видимо, он стоит не в C:\Program Files (x86)\GnuWin32\bin, как указано в первой строке Да вроде только там он и стоит, вот скрин из проводника: Спойлер В переменных среды указал точно такой же путь: Спойлер Что можно сделать, как узнать или указать системе где утилита? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 13 февраля Опубликовано 13 февраля · Жалоба Это make, он работает. А дальше вызывает GCC из этой же папки. А его там нет Обычно тулчейны выглядят вот так: и путь в makefile прописывают к конкретному, чтобы не запустился не тот 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Turgenev 1 13 февраля Опубликовано 13 февраля (изменено) · Жалоба 15 минут назад, MrYuran сказал: А дальше вызывает GCC из этой же папки. А его там нет Действительно. В makefile надо было указать путь не к утилите, а к компилятору, исправил, спасибо! Изменено 13 февраля пользователем Turgenev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 13 февраля Опубликовано 13 февраля · Жалоба 58 minutes ago, Turgenev said: Установил gcc-13.2.0-64.exe 18 minutes ago, Turgenev said: fatal error: sys/ioctl.h: No such file or directory Для целей "научиться общаться с make'ом" рекомендую нагуглить какой-нибудь другой пример. Желательно чтоб там прямо в описании было написано, что это makefile examples, а не вот это вот "an unsuccessful attempt". Для целей "глубоко разобраться в отличиях POSIX и WinAPI" рекомендую гуглить в сторону "cannot find sys/ioctl.h on MinGW compiler". Но это трудный путь, я сам туда далеко не ходил. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Turgenev 1 13 февраля Опубликовано 13 февраля · Жалоба Понял, что ioctl нет в gcc. Почитав интернет, поставил cygwin. Пробую собрать через него. Продвинулся дальше, но возникла ошибка не знает параметра -lch341: Спойлер output_native/scaling.o -I. -MMD -ggdb3 -Lcore -lch341 -o output_native/native.exe /usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lch341: No such file or directory collect2: error: ld returned 1 exit status make: *** [Makefile:44: output_native/native.exe] Error 1 В интернете такого параметра не нахожу. Что это? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
antis 1 13 февраля Опубликовано 13 февраля · Жалоба 3 минуты назад, Turgenev сказал: Понял, что ioctl нет в gcc. Почитав интернет, поставил cygwin. Пробую собрать через него. Продвинулся дальше, но возникла ошибка не знает параметра -lch341: Скрыть контент output_native/scaling.o -I. -MMD -ggdb3 -Lcore -lch341 -o output_native/native.exe /usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lch341: No such file or directory collect2: error: ld returned 1 exit status make: *** [Makefile:44: output_native/native.exe] Error 1 В интернете такого параметра не нахожу. Что это? Имя библиотеки (ch341) Которая скорее всего должна быть в папке core 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 14 февраля Опубликовано 14 февраля · Жалоба https://github.com/fifteenhex/libch341a может, и не это, но что-то в этом духе 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 14 февраля Опубликовано 14 февраля · Жалоба 2 hours ago, MrYuran said: может, и не это С вероятностью 99% - не это. Тот же автор в соседнем проекте использует https://github.com/KerJoe/RTDMultiProg/tree/master/interfaces/ch341 К слову, цифирки "341" втречаются только в мейкфайле. Т.е. есть некоторая вероятность, что оно там по ошибке (например, планировался функционал для связи ПК - девайс, но не сложилось). Я бы попробовал выкинуть, для начала. Но в любом случае. правильный подход - попросить автора добавить в исходный репозитарий саму библиотеку или хотя бы ссылку на неё вместо гаданий на гуще. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 14 февраля Опубликовано 14 февраля · Жалоба В 14.02.2024 в 10:34, esaulenka сказал: С вероятностью 99% - не это. Ну, я имел в виду lib341.a, которая прописана в мэйкфайле. И вывалил первый результат из поиска. Не вникая в контекст, конечно, трудно что-либо сказать. Но вообще на гитхабе принято указывать Related projects или как там у них Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Turgenev 1 14 февраля Опубликовано 14 февраля · Жалоба Поискав еще немного тоже пришел к выводу что надо попробовать удалить этот параметр из make файла. Все скомпилировалось. Спойлер /cygdrive/d/ORTD2662-master $ make gcc output_native/adjust_.o output_native/adjust_customer_.o output_native/audio_.o output_native/auto_.o output_native/closecaption_.o output_native/eeprom_.o output_native/framesync_.o output_native/func_.o output_native/gmiosdfunc_.o output_native/guartsend_.o output_native/hdmi_.o output_native/i2c_.o output_native/int_.o output_native/ir_nec_.o output_native/key_.o output_native/key_pcb2660_003_5key_.o output_native/main_.o output_native/mcu_.o output_native/memory_.o output_native/misc_.o output_native/mode_.o output_native/osd_fac_.o output_native/osdmenufunc003_.o output_native/osdproc003_.o output_native/osdres003_.o output_native/osdtable003_.o output_native/power_.o output_native/rtdaccess_.o output_native/scaler_.o output_native/source_.o output_native/struct_.o output_native/sync_.o output_native/timer_.o output_native/uart_.o output_native/vbi_.o output_native/vchip_.o output_native/video_.o output_native/videodec_.o output_native/ypbpr_.o output_native/debug.o output_native/i2c_native_iface.o output_native/main.o output_native/misc.o output_native/composite.o output_native/hdmi.o output_native/vga.o output_native/1bit_font_vlc.o output_native/osd.o output_native/osd_ui.o output_native/adc.o output_native/ddc.o output_native/pins.o output_native/timer.o output_native/uart.o output_native/measure.o output_native/mode_tables.o output_native/scaler.o output_native/scaler_access.o output_native/scaler_tables.o output_native/scaling.o -I. -MMD -ggdb3 -Lcore -o output_native/native.exe Но в папке output_native нет файлов прошивки - hex, bin. Хотя они указаны как цели make файле. Есть только файлы компилятора (объектные и зависимостей) и exe файл. 24 минуты назад, esaulenka сказал: правильный подход - попросить автора В подобную ситуацию попадал ни раз (когда не понятно что имел в виду автор) и всегда хотелось спросить напрямую. Я не понимаю, как это делается на гитхабе, если автор не оставляет контактов? Спойлер Удаление 3х целей в конце make файла не помогло: Спойлер удалил all: native firmware program: $(SDCC_OUTPUTDIR)/firmware.bin $(PROGRAMMER) "$(CURDIR)/$(SDCC_OUTPUTDIR)/firmware.bin" clean: $(RMDIR) $(NATIVE_OUTPUTDIR) $(RMDIR) $(SDCC_OUTPUTDIR) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 14 февраля Опубликовано 14 февраля · Жалоба 31 minutes ago, Turgenev said: хотелось спросить напрямую. Я не понимаю, как это делается на гитхабе Общепринятый способ - написать issue. Точнее, поискать по уже созданным, и в случае необходимости - написать ещё. https://docs.github.com/en/issues/tracking-your-work-with-issues/about-issues Можно, конечно, в git log посмотреть емейл автора (со мной пару раз так связывались), но лучше писать в общедоступное место. 31 minutes ago, Turgenev said: Но в папке output_native нет файлов прошивки - hex, bin. Хотя они указаны как цели make файле. В обсуждаемом мейкфайле два таргета - native (эмулятор (?), работающий на ПК) и firmware (собственно, прошивка для железки). У вас есть только cygwin-gcc, который умеет собирать только под win64. firmware должно собираться неким sdcc (я довольно далёк от контроллеров дисплеев, и без гугла не скажу, что это такое). Можете попробовать 'make firmware' чтобы получить ворох ошибок об отсутствии второго компилятора. UPD: 31 minutes ago, Turgenev said: Но в папке output_native нет файлов прошивки - hex, bin. Хотя они указаны как цели make файле. А почему должно было помочь? Вот если бы вы запустили 'make program' или 'make all', можно было б увидеть разницу. А так - вообще ничего не поменялось. Ну и ещё раз. Почитайте описание Makefile. По сути своей, он очень простой (по крайней мере, пока всякие нехорошие товарищи не пытаются делать простым инструментом сложные вещи, превращая скрипт во что-то нечитаемое). 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 14 февраля Опубликовано 14 февраля · Жалоба В 14.02.2024 в 11:15, esaulenka сказал: firmware должно собираться неким sdcc (я довольно далёк от контроллеров дисплеев, и без гугла не скажу, что это такое). Это спецGCC для разной дичи типа STM8 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться