#makefile
#makefile
Вопрос:
TESTS=test/hello.c
try:
@for t in $(TESTS); do echo $(basename $$t); done
Запустив «make», я получаю
~ make
test/hello.c
Это странно, потому что я ожидал получить базовое имя «hello.c». Есть объяснение? Спасибо.
Ответ №1:
Проблема в том, что вы пытаетесь использовать директиву Make basename
внутри цикла оболочки for
. Make сначала развернет $(basename ...)
инструкцию (так $(basename $$t)
становится $t
), затем передаст команду
for t in test/hello.c; do echo $t; done
для командной строки.
Это даст test/hello
:
@for t in $(basename $(TESTS)); do echo $$t; done
и это даст hello.c
:
@for t in $(notdir $(TESTS)); do echo $$t; done
Комментарии:
1. Да. Это имеет смысл. Каким тогда было бы решение для распечатки базового имени из Makefile
2. Используйте
$$(basename $(TESTS))
3.@jsp: Это вызывает функцию оболочки
basename
. Я предположил, что OP хотел использовать функцию Makebasename
.