我的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.
我想你不想 $< . 这扩展到第一个先决条件,在本例中是 main-test.o 也就是说你要建造 build/main-test.o-test 使用 main-test.o.o 和 test/main-test.o-test.cpp 这似乎不大可能。
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