从子目录访问父 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...; )
.
如果您可以按照 Oo.oO 的建议从 foo/bar/
构建 baz
,您可以简单地
make -f ../Makefile baz
make
将从 foo/bar/
运行 构建 baz
,如 ../Makefile
.
中所示
如果您必须在 foo/
中才能构建 baz
,您应该使用:
make -C .. baz
make
将更改为 ..
,即在读取 makefile 之前 foo
,因为它会在这里找到默认值之一 (Makefile
),它将用它来发现如何构建 baz
.
如果您必须在另一个目录中,例如foo/
的父级,您需要两个选项和类型:
make -C ../.. -f foo/Makefile baz
make
将首先更改为 ../..
(foo/
的父目录),然后它将使用 foo/Makefile
来发现如何构建 baz
.
假设我的目录结构是这样的:
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...; )
.
如果您可以按照 Oo.oO 的建议从
foo/bar/
构建baz
,您可以简单地make -f ../Makefile baz
中所示make
将从foo/bar/
运行 构建baz
,如../Makefile
.如果您必须在
foo/
中才能构建baz
,您应该使用:make -C .. baz
make
将更改为..
,即在读取 makefile 之前foo
,因为它会在这里找到默认值之一 (Makefile
),它将用它来发现如何构建baz
.如果您必须在另一个目录中,例如
foo/
的父级,您需要两个选项和类型:make -C ../.. -f foo/Makefile baz
make
将首先更改为../..
(foo/
的父目录),然后它将使用foo/Makefile
来发现如何构建baz
.