gpt4 book ai didi

r - 测试 CRAN 是否正在检查包裹

转载 作者:行者123 更新时间:2023-12-04 15:43:21 25 4
gpt4 key购买 nike

我的包中的某些函数使用 C++11 容器运行得更快,但 CRAN 不接受我的包同时使用 $(SHLIB_OPENMP_CXXFLAGS)$(CXX1XSTD)因为它不能在 Solaris(或其他次要平台)上编译。 CRAN 的建议是编写一个配置脚本,但我认为这对我来说太费时了,而且我的代码对于很少有人使用的平台来说会不必要地复杂化。

目前,我刚刚注释掉了所有 C++11 代码,并删除了 $(CXX1XSTD)来自 Makevars用于 CRAN 提交。这是一个糟糕的解决方法,我更希望能够在 Makevars 中检测到 CRAN并进行调整,所以我不必为每个版本都维护一个 CRAN 叉。

我仍在测试 C++11 是否可用,但这只是 Makevars 中 C++11 和 OpenMP 标志的组合,这是 Solaris 上 CRAN 提交的绊脚石。我觉得必须有一个简单的方法来解决这个问题。

是否有我应该使用的环境变量来测试 CRAN 本身是否正在检查我的包,我可以在 Makevars 中测试它?我已经搜索了 R 代码库并阅读了 R Internals 和 Writing R Extensions,尽管我不能说我对它们一无所知,这是一些 CRAN 维护者所期望的。 CRAN 可能设置了一些环境变量,但我希望测试诸如 _R_CHECK_CRAN_INCOMING_=TRUE 之类的东西。会引起维护者的愤怒。

我认为 Makevars 中没有“if solaris”测试就足够了:不允许同时存在 C++11 和 OpenMP 标志,因为它们在使用频率甚至低于 Solaris 的平台上可能会失败。

也许我只是以错误的方式接近这个。

最佳答案

尽管可以为此进行测试,但真正正确的方法是配置脚本。我是用configure.ac autoconf 来生成的,最后也没那么难。然后,C++ 代码可以根据需要使用 ifdef 来测试是否存在 C++11 符号,并且仍然使用 OpenMP #pragma 声明。 Windows 需要特殊处理。我使用了 RODBC 包中的方法。这尚未提交给 CRAN 或在 Solaris 上进行测试,但它确实直接回答了 CRAN 维护者的建议。

见:https://github.com/jackwasey/icd

相关文件有:configure.ac、src/config.h.in、src/Makevars.in

关于r - 测试 CRAN 是否正在检查包裹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29210506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com