【问题标题】:How such makefile works? (is it normal?)这样的makefile是如何工作的? (正常吗?)
【发布时间】:2014-07-22 09:12:55
【问题描述】:

我在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. 它是编写make文件的标准方法吗? (即人们通常是这样做的还是“异国情调”?)
  3. 具体是如何工作的?
    make 如何为同一个文件组合 2 个不同的规则? (只是附加依赖列表或更多内容?)
    (我正在浏览 GNU-make 手册,但找不到相关部分)

【问题讨论】:

    标签: makefile


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      GNU Make manual:

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

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

      【讨论】:

        猜你喜欢
        • 2018-05-27
        • 2018-01-26
        • 1970-01-01
        • 1970-01-01
        • 2013-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多