我有一个隐含的规则:
%.so: %.so.5
qnx_ln $< $@
我意识到,对于另一个目标,我必须将所有.so
文件作为该目标的先决条件。
我试过这个:
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs %.so
...
但我得到了输出
*没有规则使目标“%..so”成为“makegen”所需要的。停止播放。
发布于 2016-08-11 14:23:20
%
先决条件模式只能在静态和隐式模式规则中使用,其中它们与目标的相应%
部分相匹配;在常规规则中使用%
是一个字面字符。
您需要逐字逐句地指定依赖项,除非某些源文件名与.so
文件名之间存在某种对应关系,您可以利用这两者之间的对应关系,可能您一开始就已经在使用这两种方法来链接.so
文件。
发布于 2016-08-15 23:10:31
正如前面指出的,不可以这样做,因为这不是先决条件模式的工作方式。也许你给了以下的一个想法,并拒绝了它,但我怀疑你可能会发现,以下几个贴切:
%.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)
发布于 2016-08-15 23:16:20
也许您正在寻找一个规则来匹配每个现有的*.so文件?
makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs $(wildcard *.so)
...
但是,如果有一些模式可以生成尚未生成这些文件的*.so文件,则它们(显然)将不会被通配符匹配,通配符只检查现有的文件。如果这是您真正想要完成的,那么您可能希望以某种方式枚举实际的文件。
https://stackoverflow.com/questions/38905268
复制相似问题