我试图创建一个GNU Makefile规则,将文件(通过VPATH找到)从一个目录复制到另一个目录,保留其目录结构。
有几种方法可以做到这一点(从cp -r
开始)但似乎没有一种方法在make
的上下文中工作,其中复制是在目标<中启动的/ em>目录。
E.g。
cp ../src/foo.c ../src/bar.c .
所有源文件共享一个公共目录(在运行时只有已知),并且应该删除此公共目录。
E.g。
$ srcdir=../../knurgl
$ cp ${srcdir}/src/foo.c ${srcdir}/src/bar.c .
$ find . -type f
./src/foo.c
./src/bar.c
即使公共目录在运行时已知,它也可以是任意的,甚至包括当前目录.
(在这种情况下,操作应该是一个nop)。
cp --parent ${srcdir}/src/foo.c ${srcdir}/src/bar.c .
但是当从目标目录调用时,它肯定会拒绝工作(因为它总是会将文件复制到自己身上)。
tar c ${srcdir}/src/foo.c ${srcdir}/src/bar.c | tar x
这会删除所有相关目录,但保留其余目录(因此我最终使用./knurgl/src/foo.c
代替./src/foo.c
。
--strip-components
选项对我没什么帮助,因为我不知道${srcdir}
的深度。
答案 0 :(得分:1)
而不是
cp --parent ${srcdir}/src/foo.c ${srcdir}/src/bar.c .
(这不起作用,因为它不会剥离$srcdir
)你可以写
(wd=$PWD; cd $srcdir; cp --parent src/foo.c src/bar.c $wd)
答案 1 :(得分:0)