在 makevars 的 rcpp/arrayfire 中检测 R 版本

Detecting R Version in Rcpp/arrayfire in makevars

提问人:owalt 提问时间:5/11/2022 更新时间:5/12/2022 访问量:92

问:

我是构建 R 包的新手,因此我需要一些帮助:)我正在使用 Rcpp/arrayfire,并希望在我的 makevars 文件中留一行来检测用户的 R 版本。目前我已将其设置为 4.0,但我预计用户会有不同的 R 版本。

如果这个问题已经得到解答,我很抱歉没有找到一个!

这是我在 makevars 文件中的全局变量

R_VERSION = 4.0
AF_CXXFLAGS = -I/opt/arrayfire/include
AF_LIBS   = -L/opt/arrayfire/lib -laf -Wl,-rpath,/opt/arrayfire/lib /Library/Frameworks/R.framework/Versions/$(R_VERSION)/Resources/library/RcppArrayFire/libs/RcppArrayFire.so -Wl,-rpath,/Library/Frameworks/R.framework/Versions/$(R_VERSION)/Resources/library/RcppArrayFire/libs

RCPP R 包 RCPparmadillo 阵列火

评论


答:

1赞 Dirk is no longer here 5/11/2022 #1

通常的工作流程是使用一个名为(可以用任何语言编写)的脚本,该脚本“检测到这一点”,然后相应地编写或更改。configuresrc/Makevars

如果你对它有一点了解或想学习它,你也可以做 -- 我们的脚本就是其中之一。所以像这样的东西保存在一个文件中makeMakefilesrc/MakevarsMakefile

RVER = `Rscript -e 'cat(R.Version()$$major)'`

SOMEDIR = "/opt/foo/bar/"${RVER}"/some/more"

all:
    @echo Using ${SOMEDIR}

结果

$ make 
Using /opt/foo/bar/4/some/more
$ 

编辑如果你只想从版本中走出“4.2”,一种方法可能是

> gsub("(\\.\\d)?$", "", format(getRversion()))
[1] "4.2"
> 

编辑 2作为一个完整的 Makefile,它变成了

#RVER = `Rscript -e 'cat(R.Version()$$major)'`
RVER = `Rscript -e 'cat(gsub("(\\\\.\\\\d)?$$", "", format(getRversion())))'`

SOMEDIR = "/opt/foo/bar/"${RVER}"/some/more"

all:
    @echo Using ${SOMEDIR}

评论

0赞 owalt 5/12/2022
非常感谢您的帮助。我非常接近得到这个!
0赞 owalt 5/12/2022
我正在尝试在我的makevars文件中运行它,但它没有返回重新格式化的R版本。如果我只是工作,我就会工作R_VERSION = Rscript -e 'cat(gsub("(\\.\\d)?$", "", format(getRversion())))'Rscript -e 'cat(format(getRversion()))'
0赞 Dirk is no longer here 5/12/2022
请注意我的代码示例中的反引号。
0赞 owalt 5/12/2022
我包括了背蜱!它只是不会显示在我的评论中 R_VERSION =Rscript -e 'cat(gsub("(\\.\\d)?$", "", format(getRversion())))'
0赞 owalt 5/12/2022
^这不起作用