如何解决devtools::check()不识别BinaryFiles的可执行文件警告
问题根因
devtools::check() 并非直接调用原生R CMD check,而是基于rcmdcheck包实现检查流程,二者的执行逻辑差异是BinaryFiles配置失效的核心原因:
devtools::check()默认会先把源码打包为.tar.gz格式的分发包,再在临时目录解压后执行检查。如果BinaryFiles被误加入.Rbuildignore规则,打包阶段这个配置文件根本不会被纳入分发包,检查时自然读不到豁免列表。- 2.4.0版本之前的
rcmdcheck存在逻辑缺陷:检查可执行文件时会优先判断文件的系统权限位,只要文件带可执行标记就直接抛警告,完全跳过BinaryFiles的规则匹配;而原生R CMD check会先匹配BinaryFiles豁免列表,再校验文件类型,这也是手动跑R CMD check能正常识别配置的原因。
你之前尝试的路径加./前缀、文件末尾留空行都不是问题诱因,这两种写法都符合规范。
解决方法
按可靠性从高到低推荐:
- 直接移除数据文件的可执行权限(一劳永逸)
警告触发的本质是这些NMR数据文件在Linux系统下被标记了可执行权限位,直接在包根目录执行命令移除权限即可从根源解决问题,完全不需要依赖BinaryFiles配置,兼容所有版本的检查工具:
如果用git管理代码,提交时注意把权限变更一并提交,避免版本工具还原可执行位。chmod -x inst/extdata/Sample*/10/fid - 排查
.Rbuildignore配置
打开包根目录下的.Rbuildignore文件,检查是否存在匹配BinaryFiles的规则,如果有类似^BinaryFiles$的条目直接删除,确保打包时配置文件能被正常纳入分发包。 - 升级检查工具链
把devtools、rcmdcheck、pkgbuild全部升级到CRAN最新版本,新版本已经修复了旧版跳过BinaryFiles匹配的逻辑bug,升级后配置行为和原生R CMD check完全一致。
内容的提问来源于stack exchange,提问作者ricoderks
相关产品推荐
相关产品推荐

