【问题标题】:Is there a canonical way to get the first n dependencies in a Make rule?有没有一种规范的方法来获取 Make 规则中的前 n 个依赖项?
【发布时间】:2018-07-24 00:18:45
【问题描述】:

This question 解决了如何通过数字单独获取每个依赖项。

但是,如果我在一个规则中有 7 个依赖项并且我想获得前 5 个,是否有一种规范的方式来指定我想要前 5 个中的每一个?

我对此感兴趣主要是为了便于阅读。

OutBin: In1.cc In2.cc In3.cc In4.cc In5.cc libA.a libB.a
    gcc <MAGIC_STRING_FOR_FIRST_FIVE_DEPENDENCIES> -o OutBin

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    怎么样:

    OutBin: In1.cc In2.cc In3.cc In4.cc In5.cc libA.a libB.a
        gcc $(wordlist 1,5,$^) -o OutBin
    

    但如果你真正想要的是源文件,那么以下可能会更好,因为它更通用,不依赖于依赖的数量或顺序:

    OutBin: In1.cc In2.cc In3.cc In4.cc In5.cc libA.a libB.a
        gcc $(filter %.cc,$^) -o OutBin
    

    注意事项:

    1. 在先决条件中指定库 (libA.a libB.a) 但在配方中不使用它们是没有用的。不就是gcc $^ -o OutBin吗?
    2. 您应该考虑在配方中使用自动变量:

      OutBin: In1.cc In2.cc In3.cc In4.cc In5.cc libA.a libB.a
          gcc $^ -o $@
      

      它更通用,更不容易出错,并且允许对多个目标使用相同的规则。

    【讨论】:

    • 是的,问题语法有错误。对不起,我在那里有点马虎。如果愿意,请编辑答案以匹配更正的问题。我尝试编辑,发现您的文字也提到了该问题,所以我回滚了我的编辑。
    猜你喜欢
    • 2014-04-23
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多