C++11 C++;Windows/Mac中R包的编译标志 我开发了一个R包,通过RCPP和RCPPEGIN调用C++代码。我的Makevars.win如下所示(枚举是指我的问题)
CXX_标准=CXX11C++11 C++;Windows/Mac中R包的编译标志 我开发了一个R包,通过RCPP和RCPPEGIN调用C++代码。我的Makevars.win如下所示(枚举是指我的问题),c++11,rcpp,intel-mkl,compiler-flags,r-package,C++11,Rcpp,Intel Mkl,Compiler Flags,R Package,CXX_标准=CXX11 PKG_CPPFLAGS=-fopenmp-O3-Wall-ftree vectorize-march=native-mavx-mfma PKG_cxflags+=$(SHLIB_OPENMP_cxflags) PKG_LIBS=-fopenmp PKG_LIBS+=$(LAPACK_LIBS)$(BLAS_LIBS)$(FLIBS)$(SHLIB_OPENMP_cxflags) PKG_CPPFLAGS+=-I../inst/include/ 因为我想使用OpenMP
/[[Rcpp::plugins(cpp11)]
和/[[Rcpp::plugins(openmp)]
当我编译包时,一切正常,但我仍然得到默认的编译标志-O2
和-std=c++0x
。因此,我的问题是:
A.不是1。应该强制<代码> -STD= C++ 11 (顺便说一下,使用相同的Mavkar生成正确的C++版本,所以必须有一些特定于Windows)?< /P>
B.3次重复2次fopenmp吗
C.如何检查是否存在5。有没有考虑过?我这样问是因为在Mac上构建的相同软件包比在Windows上构建的快得多,而它们的配置是相同的。我使用MicrosoftR Open和Mac在Windows上对相同的代码进行了一些基准测试,Windows在这种情况下速度更快
非常感谢你的宝贵帮助 从哪里开始
首先,编译和链接选项基于R的Makeconf
和包的src/Makevars
的联合。您可以增加价值,但不能替换
其次,与此相关的是,您得到的BLAS是一个系统设置问题。一般来说,您无法从包中管理这些内容
第三,用于sourceCpp()
和cppFunction()
的插件。在包中,您可以直接声明,即CXX\u STD=cx11
第四,使用Rcpp的CRAN上几乎有1000个包。有时候,看看其中的一些功能会有帮助。许多人使用OpenMP
第五,得益于苹果,OpenMP在OSX上面临着严峻的挑战。我忘了窗户的情况是什么。它只在Linux上工作。从哪里开始
首先,编译和链接选项基于R的Makeconf
和包的src/Makevars
的联合。您可以增加价值,但不能替换
其次,与此相关的是,您得到的BLAS是一个系统设置问题。一般来说,您无法从包中管理这些内容
第三,用于sourceCpp()
和cppFunction()
的插件。在包中,您可以直接声明,即CXX\u STD=cx11
第四,使用Rcpp的CRAN上几乎有1000个包。有时候,看看其中的一些功能会有帮助。许多人使用OpenMP
第五,得益于苹果,OpenMP在OSX上面临着严峻的挑战。我忘了窗户的情况是什么。它只适用于Linux。只适用于Windows。。。只有macOS需要特殊处理。谢谢你的澄清,谢谢。@DirkEddelbuettel听起来我不清楚。。。我要说的是,这些标志在我用来构建R包的src/Makevars中,在Windows上不考虑CXX_STD=CXX11,但在Mac上考虑。我不清楚为什么。然后,很明显,我已经研究了使用OpenMP的软件包(这导致了我的5)。最后,我还认为我说得很清楚,该软件包可以在Windows上很好地构建(使用openmp)。我的问题涉及到我的标志是否正确且不冗余,以及为什么在Windows中不考虑std=c++11和-O3(它们在Mac上)。@DirkEddelbuettel感谢您的尝试。我在Just works on Windows上找到了问题的答案。。。只有macOS需要特殊处理。谢谢你的澄清,谢谢。@DirkEddelbuettel听起来我不清楚。。。我要说的是,这些标志在我用来构建R包的src/Makevars中,在Windows上不考虑CXX_STD=CXX11,但在Mac上考虑。我不清楚为什么。然后,很明显,我已经研究了使用OpenMP的软件包(这导致了我的5)。最后,我还认为我说得很清楚,该软件包可以在Windows上很好地构建(使用openmp)。我的问题涉及到我的标志是否正确且不冗余,以及为什么Windows中不考虑std=c++11和-O3(它们在Mac上)。@DirkEddelbuettel感谢您的尝试。我在上找到了问题的答案