如何更改和设置Rcpp编译参数

时间:2015-09-15 12:45:04

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

我创建了一个新的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/包括"   -fPIC -Wall -mtune = core2 -g -O2 -c RcppExports.cpp -o RcppExports.o

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

2 个答案:

答案 0 :(得分:3)

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

配置

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/configure)。 当我运行Build and Reload时,我得到了(摘录):

chmod 777 path/to/project/root/cleanup

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

这只是一个基本的例子,所以根据你的目标,你可能想要进一步采取一些步骤:

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

答案 1 :(得分:0)

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

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

  3. 然后在右上窗格中找到 Build 标签,然后选择安装并重新启动

  4. 运行sourceCpp,例如sourceCpp(file ="anRpackage/src/rcpp_hello_world.cpp")。要检查它是否已按照新说明进行编译,请转到右下窗格,然后单击 Source Cpp 标签。
  5. 然后示例函数rcpp_hello_world()将起作用。