生成文件匹配规则和配方中的模式

Makefile match patterns in rule and recipe

本文关键字:方中 模式 规则 文件      更新时间:2023-10-16

我的测试在我的makefile中出现了一种模式。我知道模式匹配器%$<.我正在尝试编译一些C++。

我有一个生成文件片段,如下所示:

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这意味着您将使用main-test.o.otest/main-test.o-test.cpp构建build/main-test.o-test,这似乎不太可能。

你可能的意思是$*

但是,您不能在先决条件列表中使用自动变量:它们仅在配方本身内部定义。

为什么不使用先决条件列表中的模式;这就是模式规则应该如何工作:

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