首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R's Makevars: PKG_CXXFLAGS vs. PKG_CXX11FLAGS

R's Makevars: PKG_CXXFLAGS vs. PKG_CXX11FLAGS
EN

Stack Overflow用户
提问于 2021-08-27 22:26:42
回答 1查看 77关注 0票数 0

在创建具有已编译的C++扩展的R包时,可以在文件src/Makevars中指定用于编译它的C++标准和标志-例如:

代码语言:javascript
运行
复制
CXX_STD = CXX11
PKG_CXXFLAGS = -fmyflag

尽管R build系统具有用于编译的变量,如CXX ( C++编译器)和PKG_CXXFLAGS (传递给C++编译器的标志),但它也具有特定于标准的标志,如CXX11/CXX14PKG_CXX11FLAGS/PKG_CXX14FLAGS

R扩展手册没有对这些其他标志说太多,但它确实提到了当前的默认标准是C++11,因此CXX == CXX11,并且不同的编译器可能用于不同的C++标准。一些注释还提到,在某些情况下,PKG_CXXFLAGS可能只适用于默认的CXX编译器。

如果我正在创建一个包,其中定义了一个src/Makevars,并且我特别要求它编译为C++11:

代码语言:javascript
运行
复制
CXX_STD = CXX11

我应该通过PKG_CXXFLAGS指定标志,还是应该使用PKG_CXX11FLAGS,或者两者兼而有之?使用特定于标准的标志是可移植的/良好的做法吗?

现在,我假设它不会有任何不同,但默认标准可能会在未来发生变化,我希望包在没有变化的情况下继续工作。我看到像RcppArmadillo这样的包只有PKG_CXXFLAGS+CXX_STD,但是如果我尝试向我的用户Makevars添加标志,通常只有当它们在PKG_CXX11FLAGS下时,包才会选择它们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-27 22:29:59

这是错误的:

代码语言:javascript
运行
复制
CXX_STD = CXX11
PKG_CXXFLAGS = -fmyflag

由于这两条线之间存在矛盾,因此您需要

代码语言:javascript
运行
复制
CXX_STD = CXX11
PKG_CXX11FLAGS = -fmyflag

就我个人而言,我一直不太理解为什么我们会有四个这样的包,因为任何一个包都只能编译成一个标准,但是...耸肩-表情-在这里...我也不拥有R build系统,只是随大流而已。如果你遵守规则的话这是可行的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68959897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档