📜  在Makefile中定义自定义后缀规则(1)

📅  最后修改于: 2023-12-03 15:07:54.296000             🧑  作者: Mango

在Makefile中定义自定义后缀规则

在 Makefile 中,我们可以定义自定义后缀规则,以告诉 make 如何根据源文件生成目标文件。通常,Makefile 默认已经定义了很多后缀规则,如 .c 文件会自动转换为 .o 文件,.f 文件转换为 .o 文件等等。但是,当我们需要自定义后缀规则来编译特定的文件时,就需要用到自定义后缀规则了。

语法

自定义后缀规则的语法格式如下:

.suffix1.suffix2:
    recipe

其中,.suffix1.suffix2 表示目标文件的后缀,recipe 则表示生成目标文件的规则。下面是一个具体的例子:

# 将 .md 文件转换为 .html 文件
.md.html:
    pandoc -s -o $@ $<

上述规则意味着,当 make 在编译时遇到一个 .md 后缀的文件,就会按照指定的规则执行 pandoc -s -o $@ $< 命令来生成该文件的目标文件 .html

  • $@ 表示目标文件名,也就是 .html
  • $< 表示依赖文件名,也就是 .md
注意事项
  • 一般情况下,我们定义自定义后缀规则时,后缀应该是尽可能独特的,不与其他已有的后缀重复,避免冲突。
  • 在使用自定义后缀规则时,需要注意依赖关系的正确性,否则可能会因为依赖关系的问题导致 make 编译失败。
  • 在使用自定义后缀规则时,需要了解所使用的编译器或工具的规则,以确保生成的目标文件符合要求。
  • 最后,需要在 Makefile 中明确指定所需要的后缀规则,这样 make 才能正确地执行你所定义的规则。

参考资料:

示例
# example.md转换为example.html
.md.html:
    pandoc -o $@ $<
# example.markdown转换为example.htm
.markdown.htm:
    pandoc -o $@ $<