gpt4 book ai didi

c++ - 如何使用 Rcpp 和内联设置 g++ 编译器标志?

转载 作者:可可西里 更新时间:2023-11-01 16:38:26 25 4
gpt4 key购买 nike

我想设置 -std=c++0x,使用带内联的 Rcpp。

我看到了R: C++ Optimization flag when using the inline package但不想在系统范围内进行更改,所以我在 Dirk 的回答中尝试了选项 2。

我试过:

settings=getPlugin("Rcpp")
settings$Makevars[length(settings$Makevars)+1] = "CXXFLAGS = $(CXXFLAGS) -std=c++0x"
fun=cxxfunction(signature(x_ ="numeric"),src,plugin="Rcpp",settings=settings,verbose=2);

但是详细的输出显示它忽略了这一点。我也尝试使用 CFLAGS,但没有包含现有值,但没有效果。

最佳答案

经过一些源代码研究和 Dirk Eddelbuettel 的提示后,我解决了这个问题:

settings$env$PKG_CXXFLAGS='-std=c++0x'

你可以用同样的方式设置PKG_CPPFLAGS

这是一个完整且更强大的示例:

library(inline)

src='
using namespace Rcpp;
std::vector<const char*> test={"Hello","World","!!!"};
return wrap(test);
'

settings=getPlugin("Rcpp")
settings$env$PKG_CXXFLAGS=paste('-std=c++0x',settings$env$PKG_CXXFLAGS,sep=' ')
fun=cxxfunction(signature(),src,plugin="Rcpp",settings=settings)

Sys.unsetenv('PKG_CXXFLAGS')

print(fun())

paste() 确保插件中是否已有任何设置,然后它们会被保留。

unsetenv()cxxfunction 应该已经在做的事情(恕我直言)。目前它将向环境添加变量,但之后不会删除它们。因此,如果没有 unsetenv() 调用,如果您稍后再次运行 cxxfunction,但使用所有默认值,您之前设置的任何 CXXFLAGS 都会得到用过的。这可能无关紧要,或者可能会产生令人惊讶的结果。 (想象一下,如果您使用 PKG_CXXFLAGS 为您自己的代码设置 -Wall -Werror,但后来的代码链接到第 3 方库并拒绝使用这些选项进行编译。)

关于c++ - 如何使用 Rcpp 和内联设置 g++ 编译器标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7063265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com