首页 > 解决方案 > R Makevars:如何评估预处理器标志的命令?

问题描述

当我使用已编译代码创建 R 包时Makevars,设置附加编译标志的文件能够在构建过程中执行任意命令,以便将编译时变量标志传递给链接器 - 示例Makevars

MY_FLAGS = `${R_HOME}/bin${R_ARCH_BIN}/Rscript -e "cat('-lmylib')"`
PKG_LIBS = $(MY_FLAGS)

但是,如果我对预处理器标志尝试相同的技巧,它将不起作用:

MY_FLAGS = `${R_HOME}/bin${R_ARCH_BIN}/Rscript -e "cat(1)"`
PKG_CPPFLAGS = -DMyFlag=$(MY_FLAGS)

将改为发出完整的命令而不对其进行评估,除非我将其更改为使用shell

MY_FLAGS = ${shell ${R_HOME}/bin${R_ARCH_BIN}/Rscript -e "cat(1)"}
PKG_CPPFLAGS = -DMyFlag=$(MY_FLAGS)

...但是,根据 R 扩展手册,shell由于不可移植性,包不应该像那样使用。

如何传递涉及运行 R 本身以评估某些命令的预处理器标志?

我意识到可以改为创建 aMakevars.in并将需要执行的代码放入 中configure.ac,但是是否有其他方法可以在没有配置脚本的情况下实现?

标签: rcran

解决方案


推荐阅读