Makefile соответствует шаблонам в правиле и рецепте - PullRequest
0 голосов
/ 03 июня 2018

У меня есть шаблон для моих тестов в моем make-файле.Мне известны соответствия шаблонов % и $<.Я пытаюсь скомпилировать C ++.

У меня есть фрагмент make-файла, который выглядит следующим образом:

diff-test: main-test.o diff.o test/diff-test.cpp 
    $(CC) $(FLAGS) $(BOOST_LINK_FLAGS) build/main-test.o build/diff.o test/diff-test.cpp -o build/diff-test
    build/diff-test

walk-test: main-test.o walk.o test/walk-test.cpp
    $(CC) $(FLAGS) $(BOOST_LINK_FLAGS) build/main-test.o build/%.o test/%-test.cpp -o build/%-test
    build/walk-test

Я пробовал что-то вроде:

%-test: main-test.o %.o test/%-test.cpp 
    $(CC) $(FLAGS) $(BOOST_LINK_FLAGS) build/main-test.o build/$<.o test/$<-test.cpp -o build/$<-test
    build/$<-test

Но это не могло сравниться с тестами, которые я хотел:

make diff-test
make: *** No rule to make target `diff-test'.  Stop.

1 Ответ

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

Не думаю, что вы хотите $<.Это распространяется на первую предпосылку, которая в данном случае main-test.o, что означает, что вы будете строить build/main-test.o-test с использованием main-test.o.o и test/main-test.o-test.cpp, что кажется маловероятным.

Вы, вероятно, имеете в виду $* вместо.

Однако вы не можете использовать автоматические переменные в списках предварительных условий: они определены только внутри самого рецепта.

Почему бы не использовать шаблон в списке предварительных требований;вот как должны работать правила шаблонов:

%-test: %.o test/%-test.cpp main-test.o
        $(CC) $(FLAGS) $(BOOST_LINK_FLAGS) $^ -o build/$*-test
        build/$*-test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...