【问题标题】:Package build ignores Makevars flags包构建忽略 Makevars 标志
【发布时间】:2018-08-19 10:17:37
【问题描述】:

问题

我试图告诉我的包使用gcc 来编译C++ 代码而不是clang。为什么我的Makevars 文件中的CXX 标志没有被使用?

(我期待/希望解决方案非常简单,但我忽略了。)


我的理解是(参见references)我可以在其中指定CXX* 标志

  1. src/Makevars 在包中,或
  2. ~/.R/Makevars

但是,我无法让选项 1 起作用,只有选项 2。

示例构建

这里是显示我正在使用的构建选项的屏幕截图。在每种情况下,我都会显示Makevars/.R/Makevars 文件,以显示我在每种情况下使用的文件。

选项 1:src/Makevars

这里我在src/Makevars 中指定CXX11 = /usr/local/bin/g++-7。构建消息说它正在构建 clang

选项 2:~/.R/Makevars

这里我在~/.R/Makevars 中指定CXX11 = /usr/local/bin/g++-7。构建消息显示它使用 g++

构建

示例包

我在最近使用Rcpp 构建的几个包中注意到了这一点,但如果你想要一个示例来测试我的googlePolylines 包是here on github


参考文献

会话信息

devtools::session_info()
Session info ----------------------------------------------------------------------------------------------
 setting  value                       
 version  R version 3.4.3 (2017-11-30)
 system   x86_64, darwin15.6.0        ## Mac OS
 ui       RStudio (1.1.414)           
 language (EN)                        
 collate  en_AU.UTF-8                 
 tz       Australia/Melbourne         
 date     2018-03-11 

【问题讨论】:

  • 您的包不能覆盖用于编译包的 C++ 编译器(/版本)。否则 R 将无法加载它。因此 R 禁止这样做。出于同样的原因,您的 R 包分发(在 GitHub 上)不应包含 src/*.o 文件。
  • 对!我没有正确设置.gitignore 并且那些.os 被错误地提交了。我现在清理了 github repo

标签: c++ r r-package


【解决方案1】:

https://stat.ethz.ch/pipermail/r-package-devel/2017q4/002087.html引用邓肯·默多克的话:

根据编写 R 扩展中的第 1.2.1 节“使用 Makevars”, R_HOME/etcR_ARCH/Makeconf 包含在 Makevars 之后,所以你是什么 看到是设计使然。我相信这是这样构建软件包的 与构建 R 的工具兼容。(请记住,包是 设计用于分发到不同的系统。)

因此,您可以通过例如PKG_CXXFLAGS 更改src/Makevars 中的各种标志,但您不能覆盖CXXFLAGSCXX 本身。而且没有PKG_CXX

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多