【问题标题】:How to change and set Rcpp compile arguments如何更改和设置 Rcpp 编译参数
【发布时间】:2015-12-11 17:35:28
【问题描述】:

我创建了一个新的Rcpp 包(通过使用 RStudio)。该包包含一个使用以下编译器选项编译的 C++ 函数:

clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include -I"/Library/Frameworks/R.framework/Versions/3.2/Resources/library/Rcpp/include" -fPIC -Wall -mtune=core2 -g -O2 -c RcppExports.cpp -o RcppExports.o

我想更改/设置这些参数,例如删除-g,添加-std=c++11 并将参数-O2 更改为-O3。此外,最好能够一次性指定这些更改(针对包)。

【问题讨论】:

  • 不是一个 Rcpp 问题(而是一个通用的 R 包编译问题)并且之前在几个场合回答过。使用src/Makevars~/.R/Makevars

标签: c++ r c++11 rcpp


【解决方案1】:

Writing R Extension, Section 1.2 下工作,您似乎应该能够使用几个 shell 脚本来处理这个问题。作为一个最小的例子,(在Linux机器上工作),我从Rcpp::Rcpp.package.skeleton创建了一个基本包,并将以下两个文件放在项目根目录中:

配置

#!/bin/bash
if [ ! -d "~/.R" ]; then
  mkdir ~/.R; touch ~/.R/Makevars
  echo "CXXFLAGS= -O3 -std=c++11 -Wall -mtune=core2" > ~/.R/Makevars
elif [ ! -e "~/.R/Makevars" ]; then
  touch ~/.R/Makevars
  echo "CXXFLAGS= -O3 -std=c++11 -Wall -mtune=core2" > ~/.R/Makevars
else
  mv ~/.R/Makevars ~/.R/Makevars.bak_CustomConfig
  echo "CXXFLAGS= -O3 -std=c++11 -Wall -mtune=core2" > ~/.R/Makevars
fi

清理

#!/bin/bash
if [ -e "~/.R/Makevars.bak_CustomConfig" ]; then
  mv -f ~/.R/Makevars.bak_CustomConfig ~/.R/Makevars
fi

然后使它们可执行(chmod 777 path/to/project/root/configurechmod 777 path/to/project/root/cleanup)。 当我运行 Build and Reload 时,我得到了(摘录):

g++ -m64 -I/usr/include/R -DNDEBUG  
-I/usr/local/include 
-I"/home/nr07/R/x86_64-redhat-linux-gnu-library/3.2/Rcpp/include"  
-fpic  -O3 -std=c++11 -Wall -mtune=core2
-c rcpp_hello.cpp -o rcpp_hello.o

g++ -m64 -shared -L/usr/lib64/R/lib 
-Wl,-z,relro -o CustomConfig.so RcppExports.o rcpp_hello.o 
-L/usr/lib64/R/lib -lR

它会覆盖 R Makevars 默认值,并使用正确的选项。


这只是一个基本示例,因此您可能需要更进一步,具体取决于您的目标:

  1. 针对不同平台(例如 Unix/Linux 与 Windows/Windows 64 位)调整脚本,我相信在链接的文章中提到了这一点。
  2. 确保从您的计算机设置文件的权限足以让这些文件在不同的计算机上执行(我认为它会起作用,但我并不完全肯定)。

【讨论】:

    【解决方案2】:

    感谢@nrussell 并回答了我 2 天搜索的问题!这些解决方案是对具有较高学习曲线的Rcpp 小插曲的必要补充。为了添加到您的说明中,我通过以下方式进行了构建:

    1. 在 RStudio 的现有 R 项目中,否则执行菜单 File>New project
    2. 构建 > 配置构建工具 > 选择“包”并指向包 您之前创建的文件夹,即Rcpp.package.skeleton(name ="yourRpackageName",cpp_files = "yoursourcefile.cpp")

    3. 然后在右上角的窗格中找到Build选项卡并选择Install and Restart

    4. 运行sourceCpp,例如sourceCpp(file ="anRpackage/src/rcpp_hello_world.cpp")。要检查它是否已使用新指令编译,请转到右下窗格并单击 Source Cpp 选项卡。
    5. 然后示例函数rcpp_hello_world() 将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      相关资源
      最近更新 更多