我有这样的目录结构:
`-- dev
|-- example-object
| |-- example-object.tex
| `-- example-template
| |-- example-template.tex
| `-- instances
| `-- example-instance.tex
`-- example-object2
|-- example-object2.tex
`-- example-template2
|-- example-template2.tex
`-- instances
`-- example-instance2.tex
我想要一个仅包含以下文件的目录:
`-- src
|-- xcv.example-object.tex
|-- xcv.example-object.example-template.tex
|-- xcv.example-object.example-template.example-instance.tex
|-- xcv.example-object2.tex
|-- xcv.example-object2.example-template2.tex
`-- xcv.example-object2.example-template2.example-instance2.tex
这个bash脚本可以实现我想要的功能,但是除了将其复制/粘贴到Makefile中之外,我无法弄清楚如何使用Make的功能来完成此操作:
mkdir -p src/
dest=$(pwd)/src
for object in $(find dev ! -path dev -type d -maxdepth 1); do
oname=$(basename "${object}")
echo cp "${oname}.tex" "${dest}"/xcv."${oname}".tex
for template in $(find "${object}" ! -path "${object}" -type d -maxdepth 1); do
tname=$(basename "${template}")
echo cp "${tname}.tex" "${dest}"/xcv."${oname}"."${tname}".tex
for instance in $(find "${template}"/instances -type f); do
iname=$(basename "${instance}")
echo cp "${iname}.tex" "${dest}"/xcv."${oname}"."${tname}"."${iname}"
done
done
done
您不能在中编写多行bash
脚本Makefile
。每行都在新的shell中执行,因此您将失去上下文。变量也被评估为make
变量。而是将代码存储在单独的bash
脚本中,然后从中运行它Makefile
。滥用bash
脚本或make
完成这项工作是不值得的。
如果您确实希望将其包含在自己的中Makefile
,则需要使它成为单行并在变量中转义美元。
无效的示例:
$ cat Makefile
test:
VAR="YES";
echo "x${VAR}";
$ make
VAR="YES";
echo "x";
x
转义:
$ cat Makefile
test:
VAR="YES"; \
echo "x$${VAR}";
jakuje@E6430:/tmp/test$ make
VAR="YES"; \
echo "x${VAR}";
xYES
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句