Проблемы с расширением файлов в Windows - PullRequest
0 голосов
/ 27 июня 2018

У меня есть make-файл, который я использую как в Linux, так и в Windows, используя цепочку инструментов arm-none-eabi. Проект содержит файлы ассемблера с расширением .s или .S в зависимости от необходимости препроцессора.

В Linux правила make-файла могут легко различать эти целевые файлы, и для каждого из них используются отдельные правила. Нет проблем в этом мире. Под Windows правила, которые я определил для обработки файлов .S, не обрабатывают эти файлы. С другой стороны, мое правило для файлов .s хорошо работает.

Ошибка возвращается:

make: Pas de règle pour fabriquer la cible « obj/secmodes.S », nécessaire pour « imgm_essProcMode.elf ». Arrêt.

No rule to build the target obj/secmode.S, required for imgm_essProcMode.elf. Stop

Я не понимаю, почему путь к источнику неверен: все .s, .S, .c находятся в папке "src"; папка "obj" используется для сгенерированных объектов ... Я понял, что окна не заботятся о случае расширения! Кажется, это сбивает с толку (gnu) make.

Итак, мой вопрос, можем ли мы по-разному управлять .s и .S в make-файле, выполняемом в среде Windows? Если да, то как мои правила должны быть изменены для этого?

Вот несколько снимков моего make-файла:

AOBJ_FILES := $(addprefix obj/,$(notdir $(ASM_FILES:.s=.o)))
ASOBJ_FILES := $(addprefix obj/,$(notdir $(ASMS_FILES:.S=.o)))
ALL_OBJ_FILES := $(COBJ_FILES) $(AOBJ_FILES) $(ASOBJ_FILES) 
.../...
image : $(BINEXECUTABLE)

all : $(EXECUTABLE)

obj/%.o: src/%.S
    $(TCPREFIX)-gcc $(AOPTgcc) -Xassembler -acdghln=$(basename $@).lst -o $@ $<

obj/%.o: src/%.s
    $(TCPREFIX)-as $(AOPT) $< -o $@ -acdghln=$(basename $@).lst

obj/%.o: src/%.c
    $(TCPREFIX)-gcc $(COPT) -Wa,-acdghln=$(basename $@).lst $(DEFINES) -o $@ $<

$(EXECUTABLE): $(ALL_OBJ_FILES)
    $(TCPREFIX)-gcc $(LOPTgcc) $^ -o $@

Спасибо за любую подсказку!

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Благодаря MadScientist решение действительно использует другое расширение, чем заглавное.
Сначала я попробовал случайный (.sp), но он был отклонен gcc. В моем случае для файлов asm, которые требуют предварительной обработки, подходящее расширение - .sx. Простая переделка make-файла для этих файлов решила все! Еще раз спасибо MadScientist.

0 голосов
/ 27 июня 2018

Это не имеет ничего общего с make. Как вы говорите, это операционная система, которая не распознает разницу в случае. Если файловая система не поддерживает имена файлов, которые отличаются только регистром, то программа типа make ничего не может с этим поделать.

Вам придется по-разному называть ваши файлы не только в одном случае: вам придется использовать .s и .sc или что-то еще, а не .s и .S.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...