installation - 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/...
保持目录结构。您可能需要根据需要进行调整...
更新
事实上我有一个小修补,你可能已经或可能没有目录结构,所以如果你需要创建目录,那么你可能必须将它分成两部分(嗯,这可能是最简单的),这里是从名为的子目录安装到名为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
但根据需要进行调整
推荐阅读
- makefile - DEVC++ Makefile.win 已更改。从磁盘重新加载?错误
- c# - .net 核心 Web 应用程序 - 什么在使用所有这些内存?小可枚举 vs 大可枚举 vs 流响应
- angular - 在命令提示符下找不到模块“@angular/compiler”
- kubernetes - ./kvtctl.sh 处的 vitess 安装失败远程错误:rpc 错误:代码 = 不可用 desc = 传输正在关闭
- jquery - 在溢出隐藏区域中向上滑动的文本效果
- templates - 在 Vue 中跨组件共享模板
- hibernate - Hibernate 中的版本检查
- java - 将 Notes 字段转换为 JsonJavaArray
- c# - 无法选择最佳候选函数。您可能需要在 Postgres 中添加显式类型转换
- java - 安卓弹簧按钮