entomolog 0 18 июня, 2012 Опубликовано 18 июня, 2012 (изменено) · Жалоба Требуется получить бинарный файл hellow.bin Исходными файлами являются: startup_ARMCM3.asm system_stm32f10x.c main.c Набросал следующий Makefile all: hellow.bin hellow.bin: hellow.elf hellow.elf: startup_ARMCM3.o main.o system_stm32f10x.o startup_ARMCM3.o: startup_ARMCM3.asm main.o: main.c system_stm32f10x.o: system_stm32f10x.c CC = arm-none-eabi-gcc AS = arm-none-eabi-as LD = arm-none-eabi-ld OC = arm-none-eabi-objcopy CCFLAGS = -mcpu=cortex-m3 -mthumb -Wall -c ASFLAGS = -mcpu=cortex-m3 -mthumb -mapcs-32 -gstabs LDFLAGS = -v -T gcc_arm.ld OCFLAGS = -O binary %.o: %.c $(CC) $(CCFLAGS) $< -o $@ %.o: %.asm $(AS) $(ASFLAGS) $< -o $@ %.elf: %.o $(LD) $(LDFLAGS) $< -o $@ %.bin: %.elf $(OC) $(OCFLAGS) $< $@ .PHONY: all clean .DEFAULT: .SUFFIXES: В результате получаю следующее: arm-none-eabi-as -mcpu=cortex-m3 -mthumb -mapcs-32 -gstabs startup_ARMCM3.asm -o startup_ARMCM3.o arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -c main.c -o main.o arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -c system_stm32f10x.c -o system_stm32f10x.o arm-none-eabi-objcopy -O binary hellow.elf hellow.bin arm-none-eabi-objcopy: 'hellow.elf': No such file make: *** [hellow.bin] Error 1 При сборке вручную всё в порядке: I:\CORTEX_M3\WORK_SPACE\hellow_world_2>arm-none-eabi-as -mcpu=cortex-m3 -mthumb -mapcs-32 -gstabs startup_ARMCM3.asm -o startup_ARMCM3.o I:\CORTEX_M3\WORK_SPACE\hellow_world_2>arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -c main.c -o main.o I:\CORTEX_M3\WORK_SPACE\hellow_world_2>arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -c system_stm32f10x.c -o system_stm32f10x.o I:\CORTEX_M3\WORK_SPACE\hellow_world_2>arm-none-eabi-ld -v -T gcc_arm.ld startup_ARMCM3.o main.o system_stm32f10x.o -o hellow.elf GNU ld (GNU Binutils) 2.21 I:\CORTEX_M3\WORK_SPACE\hellow_world_2>arm-none-eabi-objcopy -O binary hellow.elf hellow.bin GCC toolchain - YAGARTO Подскажите, пожалуйста, где собака зарыта? Изменено 18 июня, 2012 пользователем entomolog Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 18 июня, 2012 Опубликовано 18 июня, 2012 · Жалоба Похоже, что в первом случае подхватывается левая утилита make (то ли от борланда, то ли от майкрософт). Попробуйте в Вашей среде указать к нужной make абсолютный путь. Такое со многими уже случалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
entomolog 0 18 июня, 2012 Опубликовано 18 июня, 2012 (изменено) · Жалоба Похоже, что в первом случае подхватывается левая утилита make (то ли от борланда, то ли от майкрософт). Такое со многими уже случалось. Нет, тут всё ок. Для сборки запускаю батник со следующим содержимым: C:\yagarto-tools-20100703\bin\make.exe all В случае запуска левой утилиты make не компилируется вообще ничего. А тут почему-то пропускается операция линковки. Изменено 18 июня, 2012 пользователем entomolog Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 18 июня, 2012 Опубликовано 18 июня, 2012 · Жалоба Запуская ld нужно заботиться о путях к библиотекам и прочем геморрое. Не запускайте ld, запускайте gcc, он более интеллектуален и сам всё сделает. LD = arm-none-eabi-gcc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 18 июня, 2012 Опубликовано 18 июня, 2012 · Жалоба Попробуйте прописать правило для сборки elf явно: hellow.elf: startup_ARMCM3.o main.o system_stm32f10x.o $(LD) $(LDFLAGS) startup_ARMCM3.o main.o system_stm32f10x.o -o hellow.elf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
entomolog 0 18 июня, 2012 Опубликовано 18 июня, 2012 (изменено) · Жалоба Запуская ld нужно заботиться о путях к библиотекам и прочем геморрое. Не запускайте ld, запускайте gcc, он более интеллектуален и сам всё сделает. LD = arm-none-eabi-gcc Тогда бы не линковалось вручную. Попробывал, результат анологичен. Попробуйте прописать правило для сборки elf явно: hellow.elf: startup_ARMCM3.o main.o system_stm32f10x.o $(LD) $(LDFLAGS) startup_ARMCM3.o main.o system_stm32f10x.o -o hellow.elf Если так, то всё ок, собирает без проблем. Но всё же, что не так в неявной записи ? Изменено 18 июня, 2012 пользователем entomolog Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
entomolog 0 18 июня, 2012 Опубликовано 18 июня, 2012 (изменено) · Жалоба Проблема решилась методом тыка, если запись изменить на следующую, то всё линкуется. %.elf: *.o $(LD) $(LDFLAGS) $^ -o $@ Незнаю правильно так или нет, но работает. Всем спасибо за помощь ! Изменено 18 июня, 2012 пользователем entomolog Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alx2 0 19 июня, 2012 Опубликовано 19 июня, 2012 · Жалоба Незнаю правильно так или нет, но работает. Всем спасибо за помощь ! Вы так быстро откланялись, :) а ведь ответа не было... Насколько я понимаю, у Вас для создания файла elf использовался шаблон: %.elf: %.o $(LD) $(LDFLAGS) $< -o $@ Этот шаблон (для цели hellow.elf) означает, что файл hellow.elf может быть получен из файла hellow.o. Но в вашем проекте нет модуля hellow.c и, соответственно, нет файла hellow.o! Такуим образом, make не может использовать это правило для получения hellow.elf. Наличие же строчки hellow.elf: startup_ARMCM3.o main.o system_stm32f10x.o приводит make к выводу о том, что для создания hellow.elf не требуется выполнять никаких действий. Я бы посоветовал вместо шаблона задать правило для линковки примерно так: OBJ = startup_ARMCM3.o main.o system_stm32f10x.o ..... hellow.elf: $(OBJ) $(LD) $(LDFLAGS) $^ -o $@ И еще напоминаю о наличии у GNU make (а Вы, как я понял, используете именно его) ключа -d, при наличии которого он подробно сообщает, что и почему делает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться