我有一个 .c 文件,它依赖于生成的名为 control.po 的包含文件,但当它包含在依赖项中时,make 认为需要构建它。
make[1]: *** 没有规则可以创建“proccmd.o”所需的目标“control.po”。停止。
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,因此我无法轻松更改生成文件的文件扩展名。
最佳答案
I am ASSUMING there is some implied rule about .po files.
错误的假设。内置规则是通过 make -p
获得的,并且它们没有提及 .po
正如我在评论中所说:
构建大型项目时,ninja更合适(它默认并行运行,如
make -j
并且运行速度更快)。如果您从专有构建系统迁移,可能会更好。您需要编写或找到您的build.ninja
生成器(例如,使用 Python 脚本生成它,使用 meson 等)。如果您继续使用 GNU
make
,您应该为.po
后缀添加您自己的配方和规则(假设您的foo.po
是从一些foo.src
生成的)。所以阅读documentation of GNUmake
你可能想要一些 rule喜欢%.po: %.src # how to build a .po from some .src fle
您可能会发现使用remake很有用。使用
-x
来调试Makefile
关于c - 如何告诉 GNU MAKE 将 .po 文件视为 .h 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55833266/