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


make -C /path/to/dir


正如在其他答案中提到的,make(1)对此有一个-C选项;有几个命令有类似的选项(例如tar)。值得注意的是,对于其他缺乏此类选项的命令,可以使用以下命令:

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

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


如果你不想cd到一个目录的原因是你需要在当前目录中进行后面的任务,你可以使用pushd和popd:

pushd ProjectDir ; make ; popd

它会进入ProjectDir,运行make,然后回到你所在的地方。


你还可以用:

make --directory /path/to/dir

makefile:

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

run:
    ./build/test

or

run:
    ./../build/test

etc.