我目前在我的 Makefile 中使用通常的技术来安装单个文件:
install:
install -D executable ${BIN_DIR}
但是我刚刚遇到了一种情况,我需要将整个目录及其下面的所有文件移动到位。
是cp -r
最好的方法还是有更多的 linux-y/unix-y 方法来做到这一点?
我目前在我的 Makefile 中使用通常的技术来安装单个文件:
install:
install -D executable ${BIN_DIR}
但是我刚刚遇到了一种情况,我需要将整个目录及其下面的所有文件移动到位。
是cp -r
最好的方法还是有更多的 linux-y/unix-y 方法来做到这一点?
是的cp -r
,虽然 -r 是相对较晚的cp
. 我可以告诉你我们过去的做法,并且可以在文件系统等方面巧妙地工作:
让src
成为您要移动的源目录,并/path/to/target
成为目标的绝对路径。然后你可以使用:
$ tar cf - src | (cd /path/to/target; tar xf -)
我的install(1)
(Debian)版本有:
-d, --directory
treat all arguments as directory names; create all components of the specified directories
-t, --target-directory=DIRECTORY
copy all SOURCE arguments into DIRECTORY
因此,如果您想在install(1)
整个 Makefile 中始终如一地使用,您可以这样做:
install -d destdir
install srcdir/* -t destdir
-t
但是不是递归的 - 如果srcdir
包含目录,那么它们将不会被复制。
链接是另一种可行的选择。这将允许您保持多个目录(代表不同版本)可访问。