我有一个.c文件,该文件依赖于名为control.po的生成的包含文件,但是当它包含在依赖关系中时,请让其认为需要构建它。
make[1]: *** No rule to make target `control.po', needed by `proccmd.o'. Stop.
proccmd.o: ddemsgid.do ddelen.do control.po tprecs.ro tlktp.h comtrac.h basmsg.fo \
tiop.h
如果我将control.po复制到control.fo并更改依赖项control.po,它将编译。
我尝试更改.SUFFIXES 这样
.SUFFIXES:
.SUFFIXES: .c .o .h .po
还有这个
.SUFFIXES:
.SUFFIXES: .c .o .h
具有相同的结果。
我正在假设有关.po文件的一些隐含规则。
我正在将一个大型项目从专有版本转换为gnu make,因此无法轻松更改生成文件的文件扩展名。
答案 0 :(得分:0)
我正在假设有关.po文件的一些隐含规则。
错误的假设。内置规则是通过make -p
获得的,它们没有提及.po
我在评论中告诉我们:
在构建大型项目时,ninja更合适(默认情况下,它与make -j
一样并行运行,并且运行速度更快)。如果您要从专有的构建系统进行迁移,则可能会更好。您需要编写或找到build.ninja
生成器(例如,使用Python脚本生成,meson等)。
如果您继续使用GNU make
,则应为.po
后缀添加自己的配方和规则(假设foo.po
是由某些{{1}生成的) }。因此,阅读documentation of GNU make
,您可能想要一些rule之类的
foo.src
您可能发现将remake与%.po: %.src
# how to build a .po from some .src fle
一起使用来调试-x
答案 1 :(得分:-1)
生成的包含文件位于其他目录中,我无法为.po文件添加vpath条目。
VPATH_INCLUDE_LIST = ../ include:../../ include:../../../ include:../../../../ include
vpath%h $(VPATH_INCLUDE_LIST) vpath%.do $(VPATH_INCLUDE_LIST) vpath%.fo $(VPATH_INCLUDE_LIST) vpath%.to $(VPATH_INCLUDE_LIST) vpath%.ro $(VPATH_INCLUDE_LIST) vpath%.go $(VPATH_INCLUDE_LIST) vpath%.po $(VPATH_INCLUDE_LIST)