我有一个每个文件的依赖项列表:
point_deps =
bounds_deps = point
triangle_deps = point bounds
Image_deps = types bounds triangle
main_deps = Image triangle bounds point types
我想写一条规则来包含相关的依赖项。这是我最好的尝试:
out/%.o: src/%.cpp src/%.h $$($$*_deps:%=src/%.h)
g++ -o $@ -c $<
我希望$*
能够评估,例如&#34; main&#34;。然后suffix-changing substitution应该更改依赖关系列表中的每个条目,以#34; src /&#34;开头。并以&#34; .h&#34;结束。
当我尝试运行上面的代码时,我收到错误(在out/%.o
行上):
makefile:26: *** multiple target patterns. Stop.
现在我必须为每个文件的头依赖项创建一个单独的变量:
point_deps_h = $(point_deps:%=src/%.h)
bounds_deps_h = $(bounds_deps:%=src/%.h)
triangle_deps_h = $(triangle_deps:%=src/%.h)
Image_deps_h = $(Image_deps:%=src/%.h)
main_deps_h = $(main_deps:%=src/%.h)
然后我可以使用secondary-expansion包含正确的头文件:
out/%.o: src/%.cpp src/%.h $$($$*_deps_h)
g++ -o $@ -c $<