首页 > 解决方案 > install :如何安装子文件夹

问题描述

我想一个非常基本的问题,但我找不到答案。

在 Makefile 中,我想安装文件,例如:

install:
    # below is invalid, "-R" unsupported
    install -R ./install/include/* $(includedir)

这里 install/include 作为子目录,我希望它们都被安装。例如

./install/a/a.h -> /usr/local/include/a/a.h
./install/b/b.h -> /usr/local/include/b/b.h

我找不到如何做到这一点,目前我使用的是“cp -R”,它带来了并发症(https://unix.stackexchange.com/questions/218673/how-is-install-different-from- cp )

标签: installationmakefile

解决方案


这似乎更像是一个 bash / linux 问题(我假设它是 linux)

您不能进行递归安装,install但可以将其与 find 之类的东西结合使用:

includedir=./target_dir/
find ./install/include/ -type f -exec install -Dm 755 "{}" "${includedir}{}" \;

这将“安装”文件./install/include/..../target_dir/...保持目录结构。您可能需要根据需要进行调整...

更新

事实上我有一个小修补,你可能已经或可能没有目录结构,所以如果你需要创建目录,那么你可能必须将它分成两部分(嗯,这可能是最简单的),这里是从名为的子目录安装到名为source/的子目录的工作示例install/- 根据需要进行更改:

source = source/
target = install/
    
.PHONY: install
install:
    @for item in $$(find $(source) -type d) ; do install $${item} -d $(target)$${item#$(source)} ; done
    @for item in $$(find $(source) -type f) ; do install $${item} $(target)$${item#$(source)} ; done

第一行安装目录

它们都替换了顶级文件,因此您最终得到:

install
├── alf
├── fred
├── main
└── sub_dir
    ├── alf2
    ├── fred2
    └── main2

代替

install
└── source
    ├── alf
    ├── fred
    ├── main
    └── sub_dir
        ├── alf2
        ├── fred2
        └── main2

但根据需要进行调整


推荐阅读