我创建了一个新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
.此外,最好有一次指定这些更改(对于包).
完成编写 R 扩展,第 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
Run Code Online (Sandbox Code Playgroud)
清理
#!/bin/bash
if [ -e "~/.R/Makevars.bak_CustomConfig" ]; then
mv -f ~/.R/Makevars.bak_CustomConfig ~/.R/Makevars
fi
Run Code Online (Sandbox Code Playgroud)
然后使它们可执行(chmod 777 path/to/project/root/configure
和chmod 777 path/to/project/root/cleanup
)。当我运行 Build 和 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
Run Code Online (Sandbox Code Playgroud)
它覆盖了 R Makevars 默认值,并使用正确的选项。
这只是一个基本示例,因此根据您的目标,您可能希望更进一步: