如何定义和调用在Makefile中定义的变量

时间:2020-07-12 14:15:30

标签: r variables makefile

这也许有些琐碎,但我不知道该怎么做。 我有一个包含几个R和Bash脚本的makefile,make可以调用这些脚本来执行。我在Makefile中声明了一个变量(project = ABC123),并希望在R&bash脚本中使用它,这样我就不必在每个脚本中都声明该变量。我可以通过导出变量并在bash脚本中调用它来针对Bash脚本执行此操作。但是,我不知道如何在R脚本中调用此变量。

Makefile:

project = ABC123
export project
make bashscript_1
make rscript_1

bashscript_1:

cat $project"_SampleList".csv

rscript_1:

read.csv(file = $project"_SampleList".csv)

Bash脚本按预期工作,但是R脚本无法识别该变量,除非我在此脚本中声明了该变量。有人能帮我吗?感谢您的帮助。

这是我的Makefile和R脚本:

制作文件:

VAR=foo
scripts = /data/resources/scripts/

all:
    @Rscript -e 'var<-"${VAR}"' -e "source('foo.R')"

.PHONY: all

foo:
    Rscript $(scripts)foo.R

R脚本(foo.R。该脚本保存在路径“ / data / resources / scripts /”中)

print(sprintf("Hello, %s",var))

我正在使用make foo调用R脚本。我没有对您的建议进行任何更改。一旦完成这项工作,我认为可以更轻松地根据自己的需求进行调整。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Makefile

VAR=foo

all:
    @Rscript -e 'var<-"${VAR}"' -e "source('foo.r')"

.PHONY: all

Rscript可以使用-e运行R脚本。

第一个-e用于声明var变量(其值来自Makefile的{​​{1}})。下一个VAR加载主-e程序(R)。如果您在foo.r中使用-e,则无法使用Rscript运行R文件,因此需要使用Rscript foo.r

-e source(...)

foo.r

print(sprintf("Hello, %s",var)) 的输出:

make

我希望很清楚:)