首页 > 解决方案 > 如何告诉 GNU MAKE 将 .po 文件视为 .h 文件?

问题描述

我有一个 .c 文件,它依赖于生成的名为 control.po 的包含文件,但是当它包含在依赖项中时,make 认为它需要构建它。

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

标签: cmakefile

解决方案


我假设有一些关于 .po 文件的隐含规则。

错误的假设。内置规则是通过获得的make -p,他们没有提到.po


正如我在评论中所说:

  • 在构建大型项目时,ninja更适合(默认并行运行,喜欢make -j而且运行速度更快)。如果您从专有构建系统迁移,它可能会更好。您需要编写或找到您的build.ninja生成器(例如,使用 Python 脚本生成它,使用meson等...)。

  • 如果你继续使用 GNU make,你应该为你的后缀添加你自己的配方和规则.po(假设你foo.po是从 some 生成的foo.src)。所以阅读GNU 的文档,make你可能想要一些规则,比如

    %.po: %.src
       # how to build a .po from some .src fle
    
  • 你会发现使用remake with-x来调试你的Makefile


推荐阅读