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

5

我希望能够构建一个模式规则,使我可以在宏调用中使用%,但我没有得到预期的结果。

模式规则如下:

%.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个回答

4

谢谢。第二次扩展解决了问题。但是,当我尝试使用$$($$%_H)时,问题仍然存在。只有当我使用$$($$*_H)时,表达式才能正确扩展。看起来GNU make可能不喜欢在宏调用中使用%?此外,我感谢提供的额外信息。我将需要升级到自动依赖项生成,也许不是为了这个项目。 - joshterrell805
@SexyBachelor 在模式规则中,百分号具有特殊含义,请不要使用它。$*自动变量,它会扩展为与规则匹配的词干,也就是百分号。 - Eldar Abusalimov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接