这样的makefile如何工作? (这是正常的吗?)

时间:2014-07-22 09:12:56

标签: makefile

我在makefile中遇到过这样的模式

CXXOBJ = f1.o f2.o f3.o

$(CXXOBJ): %.o: %.cpp
    g++  -c $<  -o $@

f1.o: f1.cpp  f1.hpp  f2.hpp
f2.o: f2.cpp  f2.hpp  f3.hpp  macros.h
f3.o: f3.cpp  f3.hpp



它工作(至少使用GNU make 4.0)。
它使用第4行的通用配方,
但另外还使用底部定义的依赖关系。

问题

  1. 是标准的make行为吗? (或者它是否特定于GNU-make?)
  2. 是写标准文件的标准方法吗? (即,人们通常是这样做的,还是某种东西&#39;异国情调&#39;?)
  3. 它究竟是如何运作的?
    make如何为同一个文件组合2个不同的规则? (只是追加依赖列表或更多内容?)
    (我正在浏览GNU-make手册,但找不到相关部分)

2 个答案:

答案 0 :(得分:4)

这称为静态模式规则(https://www.gnu.org/software/make/manual/html_node/Static-Usage.html)。它特定于GNU make。当不同的目标需要不同的配方来构建时,它可能会很有用,但匹配相同的模式。

至于第三个问题,同一个文件没有明确的规则。一切都定义得很好,每个目标都有相应的.cpp文件。

答案 1 :(得分:3)

GNU Make manual

  

一个文件可以成为多个规则的目标。所有依赖项   所有规则中提到的都被合并到一个依赖项列表中   为了目标......

     

只能为文件执行一组命令。如果   多个规则为同一个文件提供命令,make使用   最后一组给出并打印错误信息......