从子目录访问父 Makefile 目标

Accessing parent Makefile targets from subdirectory

假设我的目录结构是这样的:

foo
foo/Makefile
foo/bar

现在说 foo/Makefile 有一个 make 目标 baz

我想从 foo/bar 调用 make baz 而不在 bar 子目录中创建另一个 Makefile。这可能吗?

GNU make 有两个适合您的情况的重要选项:-f FILE 用于告诉 make 使用哪个 makefile 而不是默认值和 -C DIR告诉 make 在读取 makefile 之前切换到目录 DIR。如何使用一个或另一个或两者取决于您的具体情况。请注意 -f 符合 POSIX 标准,而 -C 是 GNU make 支持的扩展。如果 -C 不受您自己的 make 版本支持并且没有等效项,您必须在调用 make 之前自行更改当前目录,例如( cd some/where; make...; ).

  1. 如果您可以按照 Oo.oO 的建议从 foo/bar/ 构建 baz,您可以简单地

     make -f ../Makefile baz
    

    make 将从 foo/bar/ 运行 构建 baz,如 ../Makefile.

    中所示
  2. 如果您必须在 foo/ 中才能构建 baz,您应该使用:

     make -C .. baz
    

    make 将更改为 ..,即在读取 makefile 之前 foo,因为它会在这里找到默认值之一 (Makefile),它将用它来发现如何构建 baz.

  3. 如果您必须在另一个目录中,例如foo/ 的父级,您需要两个选项和类型:

     make -C ../.. -f foo/Makefile baz
    

    make 将首先更改为 ../..foo/ 的父目录),然后它将使用 foo/Makefile 来发现如何构建 baz .