使用 make 扩展变量中的目录
Expanding directories in variables with make
我有一个项目的 makefile(如下),我在其中得到了一个文件夹 "Raw Data" - 一组来自同事的文件,并且我制作了一个 R 脚本来进行分析在其中一些文件上。我想用 makefile 做的是将目录分配给变量 RAWDIR,然后使用该变量指定 R 脚本的 make 依赖项,并将其作为脚本的命令行参数。通常在 shell 中,当使用双引号和大括号时,带空格的目录会被扩展,但我不知道这对于 make 文件是否也是正确的,就像下面的 makefile 一样,我得到消息 make: *** No rule to make target
""../Raw',pulls'. Stop.
需要所以我认为分配给 RAWDIR 的文件路径没有正确扩展。
谢谢。
RAWDIR="../Raw Data/Fc Project Raw Data"
.PHONY: dirs
pulls: dirs "${RAWDIR}/pm_fc_dnds_cleandata.csv" "${RAWDIR}/fc1_seqs.fasta" "${RAWDIR}/fc2_seqs.fasta" "${RAWDIR}/pm1_seqs.fasta" "${RAWDIR}/pm2_seqs.fasta"
Rscript Allele_Pulling.R "${RAWDIR}/" "${RAWDIR}/pm_fc_dnds_cleandata.csv"
dirs:
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/PM
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/Both
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC1PM1
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC1PM2
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC2PM1
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC2PM2
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC
mkdir -p -v Pulled_Allelic_Pairs/Aligned/PM
mkdir -p -v Pulled_Allelic_Pairs/Aligned/Both
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC1PM1
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC1PM2
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC2PM1
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC2PM2
通常 make
不能很好地支持路径名中的空格。至少 GNU make
中的某些函数可以处理由 \
.
转义的空格
以下应该适用于您的用例:
RAWDIR="../Raw\ Data/Fc\ Project\ Raw\ Data"
我有一个项目的 makefile(如下),我在其中得到了一个文件夹 "Raw Data" - 一组来自同事的文件,并且我制作了一个 R 脚本来进行分析在其中一些文件上。我想用 makefile 做的是将目录分配给变量 RAWDIR,然后使用该变量指定 R 脚本的 make 依赖项,并将其作为脚本的命令行参数。通常在 shell 中,当使用双引号和大括号时,带空格的目录会被扩展,但我不知道这对于 make 文件是否也是正确的,就像下面的 makefile 一样,我得到消息 make: *** No rule to make target
""../Raw',pulls'. Stop.
需要所以我认为分配给 RAWDIR 的文件路径没有正确扩展。
谢谢。
RAWDIR="../Raw Data/Fc Project Raw Data"
.PHONY: dirs
pulls: dirs "${RAWDIR}/pm_fc_dnds_cleandata.csv" "${RAWDIR}/fc1_seqs.fasta" "${RAWDIR}/fc2_seqs.fasta" "${RAWDIR}/pm1_seqs.fasta" "${RAWDIR}/pm2_seqs.fasta"
Rscript Allele_Pulling.R "${RAWDIR}/" "${RAWDIR}/pm_fc_dnds_cleandata.csv"
dirs:
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/PM
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/Both
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC1PM1
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC1PM2
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC2PM1
mkdir -p -v Pulled_Allelic_Pairs/Unaligned/FC2PM2
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC
mkdir -p -v Pulled_Allelic_Pairs/Aligned/PM
mkdir -p -v Pulled_Allelic_Pairs/Aligned/Both
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC1PM1
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC1PM2
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC2PM1
mkdir -p -v Pulled_Allelic_Pairs/Aligned/FC2PM2
通常 make
不能很好地支持路径名中的空格。至少 GNU make
中的某些函数可以处理由 \
.
以下应该适用于您的用例:
RAWDIR="../Raw\ Data/Fc\ Project\ Raw\ Data"