我猜是一个很基本的问题,但是我没能找到答案。
在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
但根据需要调整