如何告诉GNU MAKE将.po文件像.h文件一样对待?

时间:2019-04-24 15:07:24

标签: c makefile

我有一个.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,因此无法轻松更改生成文件的文件扩展名。

2 个答案:

答案 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)