私はこのようなディレクトリ構造を持っています:
`-- 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
スクリプトを書くことはできません。すべての行が新しいシェルで実行されるため、コンテキストが失われます。また、変数はmake
変数として評価されます。むしろ、コードを別のbash
スクリプトに保存し、それをMakefile
から実行します。 bash
スクリプトやmake
を悪用してその仕事をする価値はありません。
本当にMakefile
に入れたい場合は、1行にして、変数のドルをエスケープする必要があります。
動作しない例:
$ 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