在Unix中,我可以在一个目录中运行make而不先cd' d到那个目录吗?
正如在其他答案中提到的,make(1)对此有一个-C选项;有几个命令有类似的选项(例如tar)。值得注意的是,对于其他缺乏此类选项的命令,可以使用以下命令:
(cd /dir/path && command-to-run)
这将在子shell中运行命令,该子shell首先更改了它的工作目录(同时保留父shell的工作目录)。这里用&&代替;捕获无法更改目录的错误情况。
如果你不想cd到一个目录的原因是你需要在当前目录中进行后面的任务,你可以使用pushd和popd:
pushd ProjectDir ; make ; popd
它会进入ProjectDir,运行make,然后回到你所在的地方。
makefile:
all:
gcc -Wall -Wpedantic -std=gnu99 -g src/test.c -o build/test
run:
./build/test
or
run:
./../build/test
etc.