我创建了一个新的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
。此外,最好有一次指定这些更改(对于包)。
答案 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 :(得分:0)
感谢@nrussell并回答了我2天搜索的问题!这些解决方案是对Rcpp
小插曲的必不可少的的补充,这些小插曲具有较高的学习曲线。为了增加您的说明,我通过以下方式进行了构建:
Build>配置构建工具>选择“程序包” 并指向该程序包
您先前创建的文件夹,即Rcpp.package.skeleton(name ="yourRpackageName",cpp_files = "yoursourcefile.cpp")
然后在右上窗格中找到 Build 标签,然后选择安装并重新启动
sourceCpp
,例如sourceCpp(file ="anRpackage/src/rcpp_hello_world.cpp")
。要检查它是否已按照新说明进行编译,请转到右下窗格,然后单击 Source Cpp 标签。rcpp_hello_world()
将起作用。