首页 文章

GNU make - 另一个makefile中的引用目标

提问于
浏览
1

Preface:

是的,我的makefile写的很糟糕 .
不,我/我们没有写;我们从另一家公司继承了这个代码库 .
我想知道是否有可能解决我的问题而不重写它们 .

Question

有没有办法从另一个makefile引用目标并将其用作先决条件?

说你有:

all: libs binary

binary: # I need to add prereqs here
    blah
    blah2
    blah3

对于 binary ,我需要将其他makefile中的目标作为先决条件 .
我不能只是 include 那些makefile,因此那些目标,因为这些makefile定义相同的变量,但具有不同的值 .

有可能做这样的事情:

binary: C:/mk1:foo C:/mk2:bar
    blah
    blah2
    blah3

UPDATE

如果不清楚,makefile C:/mk1C:/mk2 是同一个makefile项目的一部分,该项目通过一些顶级makefile与 make --jobs=X 执行,所以理论上所有的makefile都可以并行生成 .

2 回答

  • 0

    有时 Recursive Make [duhn-duhn-duhnnnn!]是这项工作的正确工具:

    binary: foo bar
        blah
        blah2
        blah3
    
    .PHONY: foo bar
    
    foo:
        $(MAKE) -f mk1 $@
    
    bar:
        $(MAKE) -f mk2 $@
    

    PHONY 强制Make执行这些规则并调用其他makefile(也许)重建 foobar ,即使它们已经存在(因为这个makefile不知道它们可能具有哪些先决条件) .

  • 0

    使用include makefile(或 sinclude )机制来合并继承的makefile怎么样?只要您自己的目标具有不同的名称,这应该有效 .

    您还可以通过指定多个 -f makefile 选项来连接makefile . 它们按顺序连接在一起 .

相关问题