我的makefile中的测试出现了一种模式。我知道模式匹配器%
和$<
。我正在尝试编译一些C ++。
我有一个makefile的片段,如下所示:
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.
答案 0 :(得分:1)
我认为你不想$<
。这扩展到第一个先决条件,在这种情况下是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