Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
2 / 2 / 1
Регистрация: 30.01.2016
Сообщений: 66
1

Изменить make для bash

28.06.2020, 15:49. Просмотров 212. Ответов 10

Всем привет!
Требуется помощь — нужно изменить make для работы с bash (sh, ksh, zsh) вместо cmd.exe

[ Пожалуйста — просто помогите (внесите изменения в код), а не RTFM ]

Makefile:
Код
export PATH := $(PATH):$(HOME)/local/sdcc/bin
SHELL = cmd.exe
MCU  = stm8s103k3
ARCH = stm8

F_CPU   ?= 16000000
TARGET  ?= main.ihx

LIBDIR   = 

SRCS    := $(wildcard *.c $(LIBDIR)/*.c)
ASRCS   := $(wildcard *.s $(LIBDIR)/*.s)

#OBJS     = $(SRCS:.c=.rel)
#OBJS    += $(ASRCS:.s=.rel)

OBJ_DIR  = obj
OBJS 	:= $(patsubst %.c,$(OBJ_DIR)/%.rel,$(SRCS))
OBJS 	+= $(patsubst %.s,$(OBJ_DIR)/%.rel,$(ASRCS))

CC       = sdcc
LD       = sdld
AS       = sdasstm8
OBJCOPY  = sdobjcopy
ASFLAGS  = -plosgff
CFLAGS   = -m$(ARCH) -p$(MCU) --std-sdcc11
CFLAGS  += -DF_CPU=$(F_CPU)UL -I. -I$(LIBDIR)
CFLAGS  += --stack-auto --noinduction --use-non-free
## Disable lospre (workaround for bug 2673)
#CFLAGS  += --nolospre
## Extra optimization rules - use with care
#CFLAGS  += --peep-file $(LIBDIR)/util/extra.def
LDFLAGS  = -m$(ARCH) -l$(ARCH) --out-fmt-ihx
MKDIR_P  = mkdir -p

all: directories $(TARGET) hex size

$(TARGET): $(OBJS)
	$(CC) $(LDFLAGS) $(OBJS) -o $@

$(OBJ_DIR)/%.rel: %.c
	$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@

$(OBJ_DIR)/%.rel: %.s
	$(AS) $(ASFLAGS) $<

directories: ${OBJ_DIR}

hex: $(TARGET)
	packihx $(TARGET) > main.hex

${OBJ_DIR}:
	${MKDIR_P} ${OBJ_DIR}

size:
	@$(OBJCOPY) -I ihex --output-target=binary $(TARGET) $(TARGET).bin
	@echo ----------
	@for I in ($(TARGET).bin) do @echo Image size: %%~zI bytes.

flash: $(TARGET)
	stm8flash -c stlinkv2 -p $(MCU) -w $(TARGET)

serial: $(TARGET)
	stm8gal -p /dev/ttyUSB0 -w $(TARGET)

clean:
	rm -f *.map *.ihx *.lk *.cdb *.bin *.hex $(OBJ_DIR)/*.asm $(OBJ_DIR)/*.rel $(OBJ_DIR)/*.o $(OBJ_DIR)/*.sym $(OBJ_DIR)/*.lst $(OBJ_DIR)/*.rst

.PHONY: clean all flash directories
Заранее — ОГРОМНАЯ благодарность за помощь!

P.S.
Bash
1
2
uname -s
Darwin
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2020, 15:49
Ответы с готовыми решениями:

Удаленно изменить пароль с bash
Доброго времени суток. Сейчас пытаюсь разобраться, как можно использовать bash, для удаленного...

Изменить конфигурационный файл командного интерпретатора / Shell, Bash
Необходимо написать скрипт. К сожалению нету времени что бы разобраться. Помогите кто может. ...

Изменить конфигурационный файл командного интерпретатора / Shell, Bash
Изменить конфигурационные файлы вашего командного интерпретатора таким образом, что бы формировался...

Не могу запустить make: No rule to make target
Любой вызов make возвращает make: *** No rule to make target при запуске ./configure выводит...

10
1277 / 531 / 191
Регистрация: 28.06.2015
Сообщений: 1,205
Записей в блоге: 16
28.06.2020, 18:03 2
А в чем проблемма?
Уберите строчку SHELL = cmd.exe и смотрите какие будут ошибки. Я лично не вижу в файле ничего необычного
кроме специфичных утилит которые похоже необходимо собирать в системе в ручную

Добавлено через 26 минут
Цитата Сообщение от cave-canem Посмотреть сообщение
@for I in ($(TARGET).bin) do @echo Image size: %%~zI bytes.
Вот только вот эта строчка, меня вводит в ступор, неужели это может работать в cmd?

Добавлено через 5 минут
Это должно выглядеть как то так
Bash
1
@for I in $$(<$(TARGET).bin); do echo Image size: $$I bytes; done
0
2 / 2 / 1
Регистрация: 30.01.2016
Сообщений: 66
30.06.2020, 00:58  [ТС] 3
Спасибо за ответ.

Собственно именно строчка
Код
@for I in ($(TARGET).bin) do @echo Image size: %%~zI bytes.
и вызывает вопрос.
По логике, должны быть выведены размеры трех файлов: main.hex, main.ihx и main.ihx.bin.

Я прав?
0
1277 / 531 / 191
Регистрация: 28.06.2015
Сообщений: 1,205
Записей в блоге: 16
30.06.2020, 08:55 4
Цитата Сообщение от cave-canem Посмотреть сообщение
TARGET ?= main.ihx
Я исходила из того что $(TARGET).bin это один файл main.ihx.bin
и каждое слово из этого файла выводится в цикле
0
2 / 2 / 1
Регистрация: 30.01.2016
Сообщений: 66
30.06.2020, 12:16  [ТС] 5
>>и каждое слово из этого файла выводится в цикле

Иначе говоря это дамп бинарного файла?

И
Код
@for I in ($(TARGET).bin) do @echo Image size: %%~zI bytes.
делает примерно то же, что и
Код
hexdump -C ./main.ihx.bin
???
0
2690 / 1223 / 210
Регистрация: 10.12.2013
Сообщений: 4,132
30.06.2020, 12:49 6
Цитата Сообщение от nezabudka Посмотреть сообщение
Я исходила из того что $(TARGET).bin это один файл main.ihx.bin
и каждое слово из этого файла выводится в цикле
не. это просто размер файла $(TARGET).bin
0
2 / 2 / 1
Регистрация: 30.01.2016
Сообщений: 66
30.06.2020, 12:55  [ТС] 7
>>не. это просто размер файла $(TARGET).bin

Я что-то похожее и полагал, кто из вас двоих прав?
0
2690 / 1223 / 210
Регистрация: 10.12.2013
Сообщений: 4,132
30.06.2020, 13:00 8
( в cmd файл засовывают в for, инициализируя тем самым переменную цикла, и тогда можно воспользоваться
умопомрачительным выражением %~zX, чтобы вытащить размер файла, где X - переменная цикла )
1
2 / 2 / 1
Регистрация: 30.01.2016
Сообщений: 66
30.06.2020, 13:05  [ТС] 9
чтобы вытащить размер файла, где X - переменная цикла
Иначе говоря, в винде чтобы получить размер файла в байтах нужно писать цикл???
0
2690 / 1223 / 210
Регистрация: 10.12.2013
Сообщений: 4,132
30.06.2020, 13:33 10
точнее, использовать оператор цикла.

Добавлено через 6 минут
cave-canem, если у тебя есть какие-то сомнения, то нет ничего проще, чем взять и проверить
мои слова собственноручно.
0
2 / 2 / 1
Регистрация: 30.01.2016
Сообщений: 66
30.06.2020, 23:01  [ТС] 11
volodin661

Нет у меня сомнения в Ваших словах!

У меня сильнейшее удивление!

Такой странный способ вместо стандартного для *nix:
Код
wc -c "file"
взять и проверить
мои слова собственноручно.
Не могу, нет у меня Windows, да и не сомневаюсь я в Ваших словах, мне просто нужно было
точно знать, что делает эта строчка кода.

Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2020, 23:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

make / mingw32-make - сравнение скорости в многопоточном режиме (-j)
в MinGW + MSYS имеются такие файлы для сборки программ с помощью Makefile: Alex@tycoon-851de03e...

Почему экзешник make.exe (вернее, его разновидность mingw32-make.exe) принимает неизвестные параметры?
Друзья! У меня есть одна из сборок mingw, а там, как известно файл make.exe отсутствует, а вместо...

Аналог Make для PHP
Добрый день. Подскажите пожалуйста программы которыми можно из dev версии сайта сделать ту...

Минимальный "Unix" для GCC и make в Windows
Нельзя просто так взять и запустить GCC и make в Wymdows ) Конечно, можно запускать GCC, явно...

Функция make+, make*
Как описать функцию: make+ , make* ??? Функция этого задания должна конструировать для заданного...

Какой make нужен для сборки qtwebkit-plugin-master?
Добрый день Всем! Хотел посмотреть plugin, описанный в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.