gpt4 book ai didi

variables - GNU 制造商 : Using % in a pattern-rule macro

转载 作者:行者123 更新时间:2023-12-02 22:23:58 25 4
gpt4 key购买 nike

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

模式规则:

%.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 ) 等等。看起来 % 在宏调用中就失去了意义。

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

最佳答案

使用secondary expansion :

.SECONDEXPANSION:

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

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

关于variables - GNU 制造商 : Using % in a pattern-rule macro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com