GNU Make:如何使用后缀更改替换执行第二次扩展

时间:2016-01-07 22:13:55

标签: makefile substitution variable-expansion

我想要做什么(什么是失败的)

我有一个每个文件的依赖项列表:

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 $<

0 个答案:

没有答案