2012-01-23 5 views
1

В типичной регрессии существует КАТЕГОРИЯ, которая является «базовой» и тестовой «abc.c». Для того, чтобы запустить тест «ABC» в категории «основной», пользователь должен ввести:Целевая замена в Makefile

make basic_abc 

Затем команда должна быть:

basic_abc: abc.c 
     gcc -g -o abc abc.c 

Как я могу написать правило, это будет ЧОП «basic_» в моем $ @. Чтобы я мог использовать правило для всех тестов. В языке псевдо, как я могу получить вышеуказанное правило с замещением узором

basic_abc: $(patsubst .*_, " ", [email protected]).c 
     gcc -g -o $(patsubst .*_, " ", [email protected]) $(patsubst .*_, " ", [email protected]).c 

ответ

1

ли вы имеете в виду, как это?

.PHONY: basic_% 
basic_%: %.c 
     gcc -g -o $* $< 

Сделать уже известно, как скомпилировать .c файл. Из вашего вопроса кажется, что для basic_x имеет смысл зависеть от скомпилированного x и запускать его в кучу тестовых примеров в рецепте, но, возможно, я неправильно понимаю вашу настройку.

+0

Я думаю, что это работает. Я это попробую. Но почему мы требуем .PHONY? – Mike

+0

Точка .PHONY указывает, что нет артефакта сборки (файла цели) с этим именем; это просто «человеческая» цель, действия которой должны повторяться каждый раз, когда запрашивается make (даже если файл с этим именем существует и является более новым, чем его зависимости, по крайней мере теоретически). – tripleee

Смежные вопросы