在 Makefile 安装中将目录移动到位的最佳方法是什么?

发布于 2024-07-10 20:54:06 字数 206 浏览 9 评论 0原文

我目前正在 Makefile 中使用常用技术来安装单个文件:

install:
    install -D executable ${BIN_DIR}

但我刚刚遇到了一种情况,我需要将整个目录及其下面的所有文件移动到位。

cp -r 是最好的方法还是有更多的 linux-y/unix-y 方法来做到这一点?

I'm currently using the usual technique in my Makefile to install individual files:

install:
    install -D executable ${BIN_DIR}

But I just ran across a situation where I need to move a whole directory and all files underneath it into place.

Is cp -r the best way or is there a more linux-y/unix-y way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

掩饰不了的爱 2024-07-17 20:54:06

是的,很难想出比 cp -r 更 Unix 风格的方式,尽管 -r 是 cp 相对较晚的补充。 我可以告诉您我们使用的方式来做到这一点,并且这种方式可以在文件系统中完美地工作,例如:

src成为您想要移动的源目录,并且/path/to/target 是目标的绝对路径。 然后你可以使用:

$ tar cf - src | (cd /path/to/target; tar xf -)

Yeah, it's hard to think of a more unix-ish way that cp -r, although the -r is a relatively late addition to cp. I can tell you the way we used to do it, and that works neatly across filesystems and such:

Let src be the source directory you want to move, and /path/to/target be an absolute path to the target. Then you can use:

$ tar cf - src | (cd /path/to/target; tar xf -)
一个人练习一个人 2024-07-17 20:54:06

我的 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

因此,如果您想在整个 Makefile 中一致地使用 install(1),您可以执行以下操作:

install -d destdir
install srcdir/* -t destdir

-t<然而 /code> 不是递归的 - 如果 srcdir 包含目录,那么它们将不会被复制。

My version of install(1) (Debian) has:

   -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

So if you wanted to use install(1) consistently throughout your Makefile you could do:

install -d destdir
install srcdir/* -t destdir

-t isn't recursive however - if srcdir contains directories, then they won't get copied.

烟凡古楼 2024-07-17 20:54:06

链接是另一种可行的选择。 这将允许您保持多个目录(代表不同版本)可访问。

Linking is another viable alternative. That would allow you to keep multiple directories (representing different versions) accessible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文