编译R包是否必须在~/.R目录下存放Makevars文件?
问题解答
首先明确:编译R包不是必须在~/.R目录下存放Makevars文件。该文件属于用户自定义的编译配置覆盖文件,R本身自带系统级默认编译配置,无自定义Makevars时会默认调用内置配置完成编译。
你出现devtools::has_devel()校验正常但自定义包编译报错的情况,原因是devtools::has_devel()仅做最基础的简单编译能力校验,仅测试最简C/C++代码的编译流程,不会覆盖你自有R包可能用到的特殊编译场景,常见报错原因和对应的解决方法如下:
- 若你报错提示找不到编译器、编译器版本不匹配:可以新建一个适配当前clang12的Makevars文件写入以下配置即可,不需要找回旧文件:
CC=/usr/bin/clang CXX=/usr/bin/clang++ CXX11=/usr/bin/clang++ CXX14=/usr/bin/clang++ CXX17=/usr/bin/clang++ CXX20=/usr/bin/clang++ LDFLAGS=-L/usr/local/lib CPPFLAGS=-I/usr/local/include
- 若你报错提示找不到特定依赖库、头文件:说明旧Makevars中写入了对应依赖的路径配置,你可以找回原文件,将其中所有涉及clang4的路径替换为当前clang12的路径,其余配置保留即可。
- 若你的R包无任何需要编译的原生代码(全为R脚本):编译报错和Makevars无关,需要排查自有代码逻辑、DESCRIPTION文件配置、依赖包版本匹配问题。
内容的提问来源于stack exchange,提问作者compbiostats
相关产品推荐
相关产品推荐

