提问人:owalt 提问时间:5/11/2022 更新时间:5/12/2022 访问量:92
在 makevars 的 rcpp/arrayfire 中检测 R 版本
Detecting R Version in Rcpp/arrayfire in makevars
问:
我是构建 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
答:
1赞
Dirk is no longer here
5/11/2022
#1
通常的工作流程是使用一个名为(可以用任何语言编写)的脚本,该脚本“检测到这一点”,然后相应地编写或更改。configure
src/Makevars
如果你对它有一点了解或想学习它,你也可以做 -- 我们的脚本就是其中之一。所以像这样的东西保存在一个文件中make
Makefile
src/Makevars
Makefile
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
^这不起作用
评论