包构建忽略 Makevars 标志

Package build ignores Makevars flags

问题

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

(我 expecting/hoping 解决方案非常简单,但我忽略了。)


据我了解(参见 参考资料),我可以在任一

中指定 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


参考资料

Session 信息

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 

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

According to section 1.2.1 "Using Makevars" in Writing R Extensions, R_HOME/etcR_ARCH/Makeconf is included after Makevars, so what you're seeing is by design. I believe this is so that packages are built with tools compatible with those that built R. (Remember, packages are designed for distribution to diverse systems.)

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