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)

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

你不能对install进行递归安装,但你可以将它与find:

结合起来
includedir=./target_dir/
find ./install/include/ -type f -exec install -Dm 755 "{}" "${includedir}{}" ;

这将"安装";从./install/include/..../target_dir/...的文件保持dir结构。您可能需要根据需要进行调整…

更新事实上,我有一个小修补,你可能有或可能没有目录结构已经在适当的地方,所以如果你需要创建dirs,那么你可能不得不把它分成两个部分(好吧,这可能是最简单的),这里是一个工作的例子,从一个名为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

但根据需要调整

相关内容

  • 没有找到相关文章

最新更新