GNU Make:在模式规则宏中使用 %

jos*_*805 5 variables macros makefile

我正在尝试构建一个模式规则,允许我%在宏调用中使用,但我没有得到我期望的结果。

模式规则:

%.o: %.cpp $(%_H)
    g++ -o $@ $(FLAGS) -c $<
Run Code Online (Sandbox Code Playgroud)

问题出在 $(%_H)

出于某种原因%,没有扩展到它定义的范围。

当我打印出依赖列表时($^),只打印源文件。

我有一种非常干净的方式来设置我想使用的依赖项:

# Header Dependencies per object 
Geometry_H:=Geometry.h $(Error_H) 
Enemy_H:=Enemy.h $(Geometry_H) $(Error_H) 
Surface_H:=Surface.h $(Geometry_H) 
Player_H:=Player.h $(Geometry_H) $(Surface_H) 
SDLWindow_H:=SDLWindow.h $(Surface_H) $(Error_H) 
Path_H:=Path.h $(Geometry_H) $(Error_H) 
Territory_H:=Territory.h $(Geometry_H) 
Board_H:=Board.h $(Territory_H) $(Geometry_H) $(Player_H) $(Path_H) $(Enemy_H) $(Error_H) 
Error_H:=Error.h 
Diminisher_H:=Diminisher.h $(SDLWindow_H) $(Geometry_H) $(Surface_H) $(Board_H) $(Error_H) 
Main_H:=$(Diminisher_H)
Run Code Online (Sandbox Code Playgroud)

另一个人建议我将这些变量更改为依赖项列表。

即 Main_H:=$(Diminisher_H)

变成 Main.o: $(Diminisher_H)

这是一个很好的修复,它有效。然而,问题仍然存在,$(%_H)不知何故无效。

我想知道如何(如果可能)使其成为有效的表达式。

我已经尝试过$( $%_H ), $( $(%)_H ),$( $(value %)_H )等等。%在宏调用中似乎失去了意义。

有没有办法%在宏调用中使用?

Eld*_*mov 4

要么使用二次扩展

.SECONDEXPANSION:

%.o: %.cpp $$($$*_H)
    g++ -o $@ $(FLAGS) -c $<
Run Code Online (Sandbox Code Playgroud)

或者(IMO,更好)使用依赖项自动生成: