我的包中的一些函数使用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内部文件并编写了R扩展,尽管我不能说我对它们了如指掌,正如一些CRAN维护人员所期望的那样。可能会设置一些环境变量,但我希望对类似_R_CHECK_CRAN_INCOMING_=TRUE这样的东西进行测试会引起维护人员的不满。
我认为Makevars中的"if solaris“测试是不够的:不允许同时使用C++11和OpenMP标志,因为它们在比Solaris更少使用的平台上可能会失败。
也许我只是走错路了。
发布于 2015-03-27 10:17:59
虽然对此进行测试是可能的,但正确的方法是配置脚本。我使用configure.ac autoconf来生成它,这最终并不难。然后,C++代码可以根据需要使用ifdef来测试是否存在C++11符号,并且仍然使用OpenMP #杂注声明。窗户需要特殊处理。我使用了RODBC包中的方法。这还没有提交给CRAN,也没有在Solaris上进行测试,但它直接回答了CRAN维护者的建议。
请参阅:https://github.com/jackwasey/icd
相关文件是: configure.ac,src/config.h.in,src/Makevars.in
https://stackoverflow.com/questions/29210506
复制相似问题