GNU make - 如何将隐式模式设置为先决条件
GNU make - how to set an implicit pattern as a prerequisite
我有这个隐含规则:
%.so: %.so.5
qnx_ln $< $@
我意识到对于另一个目标,我必须使所有 .so
文件成为该目标的先决条件。
我试过这个:
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs %.so
...
但我得到了输出
*** No rule to make target '%.so', needed by 'makegen'. Stop.
%
先决条件模式只能用于静态和隐式 pattern 规则,它们匹配目标的相应 %
部分;在常规规则中使用时 %
是文字字符。
您需要逐字指定依赖关系,除非某些源文件名与您可以利用的 .so
文件名之间存在某种对应关系,大概您已经对 link .so
个文件。
如前所述,不,您不能这样做,因为这不是先决条件模式的工作方式。也许您考虑了以下内容并拒绝了它,但我怀疑您可能会发现以下内容非常合适:
%.so.target: %.so.5
echo $< >> $(BUILD)/so.targets
SO_TARGETS=$(basename $(shell cat $(BUILD)/so.targets))
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs $(SO_TARGETS)
也许您正在寻找匹配每个现有 *.so 文件的规则?
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs $(wildcard *.so)
...
但是,如果存在 可以 生成 *.so 文件但尚未生成这些文件的模式,它们将(显然)不会与通配符匹配,这只是检查现有文件。如果那是您真正想要完成的,您可能想要以某种方式枚举实际文件。
我有这个隐含规则:
%.so: %.so.5
qnx_ln $< $@
我意识到对于另一个目标,我必须使所有 .so
文件成为该目标的先决条件。
我试过这个:
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs %.so
...
但我得到了输出
*** No rule to make target '%.so', needed by 'makegen'. Stop.
%
先决条件模式只能用于静态和隐式 pattern 规则,它们匹配目标的相应 %
部分;在常规规则中使用时 %
是文字字符。
您需要逐字指定依赖关系,除非某些源文件名与您可以利用的 .so
文件名之间存在某种对应关系,大概您已经对 link .so
个文件。
如前所述,不,您不能这样做,因为这不是先决条件模式的工作方式。也许您考虑了以下内容并拒绝了它,但我怀疑您可能会发现以下内容非常合适:
%.so.target: %.so.5
echo $< >> $(BUILD)/so.targets
SO_TARGETS=$(basename $(shell cat $(BUILD)/so.targets))
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs $(SO_TARGETS)
也许您正在寻找匹配每个现有 *.so 文件的规则?
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs $(wildcard *.so)
...
但是,如果存在 可以 生成 *.so 文件但尚未生成这些文件的模式,它们将(显然)不会与通配符匹配,这只是检查现有文件。如果那是您真正想要完成的,您可能想要以某种方式枚举实际文件。