c - 如何告诉 GNU MAKE 将 .po 文件视为 .h 文件?

标签 c makefile

我有一个 .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 GNU make 你可能想要一些 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/

相关文章:

c++ - 使用 Makefile 和 GTest 对函数的 undefined reference

c++ - 使用历史(大)日期和时间(例如,公元前 11,043 年)的图书馆?

c++ - 如何将 u64 转换为两个 u32,如下所述

c++ - CMake "--target install"没有 "--build"命令行

linux - 使并行作业性能

makefile - 在单独的目录中使用相同的 make 文件

C unnnamed pipes and fork 用于计算

java - 重建 Android Studio 项目时出现错误

c - 带有输入变量的函数返回 -nan 和 -inf

c - makefile 跳过隐式规则?