我要做什么(什么失败了)
我有每个文件的依赖项列表:
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 $<