如何在 R 中的 install.packages() 函数的 configure.vars 参数中的 INCLUDE_DIR 下包含更多路径?

问题描述 投票:0回答:2

我对 gdtools 包有疑问。我想从源代码安装它,但不幸的是我无法在 Linux 机器上安装任何额外的库。我正在做的是在安装时包含软件包:

install.packages(repos = c("http://localhost.net/cran"), type = "source", pkgs = c('gdtools'), configure.vars = c("INCLUDE_DIR=/extra/gdtools/windows/cairo-1.15.10/include/cairo"))

这让我更进一步。但是然后我需要再包含一个目录,指向 freetype 库:/extra/gdtools/windows/cairo-1.15.10/include/freetype2/freetype

但是当我尝试将它添加到命令时它不起作用。我尝试过很多方法,例如它不起作用:

install.packages(repos = c("http://localhost.net/cran"), type = "source", pkgs = c('gdtools'), configure.vars = c("INCLUDE_DIR=/extra/gdtools/windows/cairo-1.15.10/include/cairo /extra/gdtools/windows/cairo-1.15.10/include/freetype2/freetype"))

有人可以帮我怎么做吗?我也从 R CMD 级别尝试过。任何解决方案对我来说都是可以接受的。

r install.packages rtools
2个回答
8
投票

这可能是一个非常令人困惑的情况,因为 R 文档没有明确告诉您如何执行此操作。但是,有几个选项可以完成工作。正如您将在示例中看到的,诀窍在于如何将字符串放在一起。要在 INCLUDE_DIR 或 LIB_DIR 中获得多个目录,只需将多个目录用单引号括在完整的双引号字符串中。但是请注意,您不需要将 -I-L 标志放在字符串的开头,但您必须将它们放在其他目录之前。这是因为 R 会在解析出 INCLUDE_DIR 和 LIB_DIR 后为您添加它。

这些方法的一个警告是每个包都可以自由实现其他变量和查找库和标头的方法。虽然 LIB_DIR 和 INCLUDE_DIR 似乎很常用,但可以找到一个使用其他特定环境变量来代替它们的包。也有可能一个包没有预先添加 -I-L。只需了解包裹的期望即可。好消息是,即使变量名等发生变化,这些一般原则仍然适用

使用配置变量

配置变量在命令行安装中可用

R CMD INSTALL --configure-vars="LIB_DIR='/my/lib/dir1 -L/my/lib/dir2' INCLUDE_DIR='/my/include/dir1 /my/include/dir2'" /path/to/myPackage

或在R

install.packages("myPackage", configure.vars=c("LIB_DIR='/my/lib/dir1 -L/my/lib/dir2' INCLUDE_DIR='/my/include/dir1 -I/my/include/dir2'"))

使用.Renviron

您还可以在 .Renviron 文件中为 R 设置环境变量。该文件由 R 在启动时读取。请参阅R 文档,了解 R 如何处理 .Renviron 以及它希望它位于何处。您可以简单地在文件中添加所需的变量,R 将在安装包时使用它们。

LIB_DIR="/my/lib/dir1 -L/my/lib/dir2"
INCLUDE_DIR="/my/include/dir2 -I/my/include/dir2"

虽然这个选项很方便,但它也意味着这些变量将用于 all 包。 configure vars 方法可能更适合一次性安装或当您需要每个包设置时(通过命名向量或列表完成)。


0
投票

使用

configure.vars
选项对我不起作用。我没试过使用 .Renviron.

R 项目文档关于自定义包编译的部分 解释了如何使用

$HOME/.R/Makevars
文件来执行此操作。填充:
PKG_CPPFLAGS_SITE = -I/path/to/my/custom/usr/local/include
我的标题工作的地方。

如果是一次性的需要,我认为启动R之前的环境变量

export PKG_CPPFLAGS_SITE=-I/path/to/my/usr/local/include
也可以。

© www.soinside.com 2019 - 2024. All rights reserved.