2

我要做什么(什么失败了)

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

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

例如,我希望$*评估为“主要”。然后后缀更改替换应将依赖项列表中的每个条目更改为以“src/”开头并以“.h”结尾。

当我尝试运行上面的代码时,我得到一个错误(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)

然后我可以使用辅助扩展来包含正确的头文件:

out/%.o: src/%.cpp src/%.h $$($$*_deps_h)
    g++ -o $@ -c $<
4

0 回答 0