Вопрос по GNU сделать встроенную функцию sub с дополнительным расширением - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть вопрос по GNU make с функцией вторичного расширения.

Вот структура моего проекта (только для примера)

.
├── build
├── Makefile
└── src
    └── a.c

А вот мой Makefile с включенным вторичным расширением

.SECONDEXPANSION:

%.o: $$(subst build,src,%.c)
        @echo $^

Я печатаю make build/a.o, GNU make жалуется:

make: *** No rule to make target `build/a.o'.  Stop.

Похоже, что make не находит предпосылок, поэтому она перестает делать.

Для дальнейшей отладки ядобавьте a.c в каталог build и введите make build/a.o, GNU сделает вывод эти

build/a.c

Вывод странный, так как я ожидаю, что вывод будет src/a.c вместо build/a.c

Кажется, что встроенная текстовая функция subst не работает со вторичным расширением.

Кто-то знает, что не так с моим Makefile?

Спасибо

1 Ответ

0 голосов
/ 05 ноября 2019

Это то, что вы пытаетесь достичь?

build/%.o: src/%.c
    @echo $^

соблюдайте:

$ make build/a.o
src/a.c

Второе расширение в сочетании с правилом шаблонов и файлами в каталоге - жестокий зверь. Я не до конца понял, почему ваша конструкция не работает. просто это не работает. будет обновлять пост, когда я полностью понимаю.

для получения дополнительной информации:

...