Запуск echo с флагами в Makefile под WSL - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь запустить Makefile из-под WSL, который содержит следующие строки:

debug: create_soft_links
@mkdir -p Debug64
@echo -e 'all: bld'                                             > Debug64/Makefile
@echo                                                          >> Debug64/Makefile
@echo -e '%.o: ../../%.c'                                      >> Debug64/Makefile
@echo -e '\tgcc -g $$(CFLAGS) $$(INCLUDE) $$< -o $$@'          >> Debug64/Makefile

Проблема в том, что результирующий файл Debug64/Makefile выглядит следующим образом:

-e all: bld

-e %.o: ../../%.c
-e      gcc -O3 $(CFLAGS) $(INCLUDE) $< -o $@

Коллега только что показал мне на реальной машине Linux, что команда make там работает правильно, и предыдущий флаг -e не печатается в сгенерированном Debug64/Makefile. Что я делаю не так?

1 Ответ

1 голос
/ 13 февраля 2020

Используйте вместо echo команду printf (1) . Таким образом, ваша последняя строка будет

@printf "\tgcc -g %s %s $$< -o $$@\n" $$(CFLAGS) $$(INCLUDE)

Кстати, если вы генерируете свой скрипт автоматизации сборки , подумайте о переключении на ninja . В качестве такого генератора вы можете использовать Guile или Python или GNU awk .

...