在Unix中,是否可以在不先cd到该目录的情况下在目录中运行“ make”?


210

在Unix中,是否可以make在目录中运行而不cd先进入该目录?

Answers:


338

make -C /path/to/dir


8
脾气暴躁-这不是标准产品;它必须是GNU扩展。由于您说过Linux和Unix,所以不清楚要使用哪种,但是-C选项在Solaris 10(/ usr / ccs / bin / make),AIX(/ usr / bin / make)或HP-UX 11.23(/ usr / bin / make)。不过,四分之一还算不错。
乔纳森·莱夫勒

6
它也可以在BSD make中工作,因此它不仅是GNU扩展。
克里斯·多德

4
确保“ C”为大写。
m.r226 16/09/25

101

如其他答案所述,make(1)-C 为此提供了一个选项;几个命令具有相似的选项(例如tar)。请注意,对于缺少此类选项的其他命令,可以使用以下命令:

(cd /dir/path && command-to-run)

这将在子外壳程序中运行命令,该子外壳程序首先要更改其工作目录(同时保留父外壳程序的工作目录)。此处&& 用于代替; 无法捕获目录的错误情况。


22

如果您不想CD到目录的原因是因为您需要留在当前目录中以进行后续任务,则可以使用push和popd:

pushd ProjectDir ; make ; popd

这将进入ProjectDir,运行make,然后返回您所在的位置。


11

您也可以使用:

make --directory /path/to/dir

-3

生成文件:

all:
    gcc -Wall -Wpedantic -std=gnu99 -g src/test.c -o build/test

run:
    ./build/test

要么

run:
    ./../build/test

等等


1
答案完全没有回答这个问题-它是关于如何调用make的,而不是如何编写makefile的。
彼得
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.