You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GitHub Actions中为R包代码覆盖率禁用OpenMP的方法咨询

解决R包中OpenMP并行代码的covr覆盖率统计问题

针对你遇到的OpenMP并行代码块无法被covr统计覆盖率的问题,以下是两种在GitHub Actions覆盖率作业中禁用OpenMP的具体实现方法:

方案1:通过Makevars的环境变量控制OpenMP开关

修改包根目录下的Makevars(Linux/macOS)或Makevars.win(Windows)文件,添加条件判断逻辑,根据环境变量决定是否启用OpenMP:

# Makevars (适用于Linux/macOS)
# 先默认添加OpenMP编译选项
PKG_CXXFLAGS += $(SHLIB_OPENMP_CXXFLAGS)
PKG_LIBS += $(SHLIB_OPENMP_CXXFLAGS)

# 当环境变量DISABLE_OPENMP存在时,移除OpenMP相关编译选项
ifdef DISABLE_OPENMP
PKG_CXXFLAGS := $(filter-out $(SHLIB_OPENMP_CXXFLAGS),$(PKG_CXXFLAGS))
PKG_LIBS := $(filter-out $(SHLIB_OPENMP_CXXFLAGS),$(PKG_LIBS))
endif

然后在GitHub Actions的覆盖率作业中,设置DISABLE_OPENMP环境变量即可:

jobs:
  coverage:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: r-lib/actions/setup-r@v2
      - name: Install dependencies
        run: |
          install.packages(c("covr", "testthat", "remotes"))
          remotes::install_deps(dependencies = TRUE)
      - name: Run coverage without OpenMP
        env:
          DISABLE_OPENMP: "true"
        run: |
          covr::codecov()

这种方案的好处是本地测试时也可以通过export DISABLE_OPENMP=true编译不带OpenMP的版本,方便调试。

方案2:直接在GitHub Actions的YAML中覆盖编译变量

无需修改包内的Makevars文件,直接在覆盖率作业的环境变量中清空OpenMP相关编译选项:

jobs:
  coverage:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: r-lib/actions/setup-r@v2
      - name: Install dependencies
        run: |
          install.packages(c("covr", "testthat", "remotes"))
          remotes::install_deps(dependencies = TRUE)
      - name: Run coverage without OpenMP
        env:
          # 直接清空OpenMP的编译标志,强制编译不启用OpenMP的版本
          SHLIB_OPENMP_CXXFLAGS: ""
          SHLIB_OPENMP_CFLAGS: ""
        run: |
          covr::codecov()

这种方案更轻量,不需要改动包的配置文件,仅在CI的覆盖率作业中生效。

需要注意的是,如果你的Windows作业也需要处理,只需在对应的job中添加同样的环境变量设置即可,R的编译变量在各平台是统一的。

内容的提问来源于stack exchange,提问作者JRR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:42:12