在Unix中,我可以在一个目录中运行'make'而不先cd到那个目录吗?

use*_*795 198 unix linux makefile

在Unix中,我可以在一个目录中运行'make'而不先cd到那个目录吗?

bmo*_*ans 316

make -C /path/to/dir

  • Grump - 这不是标准制作; 它必须是GNU扩展.既然你说Linux和Unix,你不清楚你想要什么,但是-C选项在Solaris 10(/ usr/ccs/bin/make),AIX(/ usr/bin/make)或者HP-UX 11.23(/ usr/bin/make).尽管如此,4分中有1分并不算太糟糕. (8认同)
  • 它也适用于BSD make,所以它不仅仅是一个GNU扩展. (6认同)
  • 确保'C'是大写的. (4认同)
  • 或者使用“--directory=”,其作用相同。 (2认同)

Dav*_*e C 96

如其他答案所述,make(1)有一个-C 选项; 几个命令有类似的选项(例如tar).值得注意的是,对于缺少此类选项的其他命令,可以使用以下命令:

(cd /dir/path && command-to-run)
Run Code Online (Sandbox Code Playgroud)

这将在子shell中运行该命令,该子shell首先更改其工作目录(同时保留父shell的工作目录).这里&& 用来代替; 捕获无法更改目录的错误情况.


Eni*_*rry 22

如果您不想cd到目录的原因是因为您需要保留在当前目录中以便以后执行任务,则可以使用pushd和popd:

pushd ProjectDir ; make ; popd
Run Code Online (Sandbox Code Playgroud)

进入ProjectDir,运行make,然后回到原来的位置.


kor*_*t1k 10

您也可以使用:

make --directory /path/to/dir
Run Code Online (Sandbox Code Playgroud)