我正在尝试构建一个模式规则,允许我在宏调用中使用%
并且我没有得到我期望的结果。
模式规则:
%.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 )
等等。
在宏调用中,%
似乎只是失去了意义。
在宏调用中无法使用%
吗?
答案 0 :(得分:4)
.SECONDEXPANSION:
%.o: %.cpp $$($$*_H)
g++ -o $@ $(FLAGS) -c $<
或(IMO,更好)使用依赖项自动生成: