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

时间:2012-06-03 04:19:21

标签: variables macros makefile

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

模式规则:

%.o: %.cpp $(%_H)
    g++ -o $@ $(FLAGS) -c $<

问题在于$(%_ 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)

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

即。 Main_H:= $(Diminisher_H)

变 Main.o:$(Diminisher_H)

这是一个很好的修复,它的工作原理。 但是,问题仍然存在,$(%_H)在某种程度上无效。

我想知道如何(如果可能的话)使它成为一个有效的表达。

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

在宏调用中无法使用%吗?

1 个答案:

答案 0 :(得分:4)

使用secondary expansion

.SECONDEXPANSION:

%.o: %.cpp $$($$*_H)
    g++ -o $@ $(FLAGS) -c $<

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