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

这样的makefile是如何工作的?(这正常吗?),makefile,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 cxobj=f1.of2.of3.o $(cxobj):%.o:%.cpp g++-c$

我在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
cxobj=f1.of2.of3.o
$(cxobj):%.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兼容)
它使用第四行的通用配方,
但除此之外,还使用在底部定义的依赖项

问题
  • 这是标准的行为吗?(还是特定于GNU make?)
  • 这是编写make文件的标准方式吗?(也就是说,人们通常是这样做的,还是有什么“异国情调”
  • 它到底是如何工作的
    如何为同一个文件组合两个不同的规则?(只需附加依赖项列表或其他内容?
    (我正在浏览GNU make手册,但找不到相关部分)
  • :

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

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


    这称为静态模式规则()。它是特定于GNU制造的。当不同的目标需要构建不同的配方,但匹配相同的模式时,它可能很有用

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