Travis CI在R包子目录中找不到头文件

时间:2019-04-17 17:59:15

标签: r travis-ci r-package

我正在尝试设置Travis-CI来构建this R软件包。该软件包通过以下步骤在本地生成,这些步骤与Travis上的生成过程密切相关(生成here失败):

git clone --depth=50 --branch=master https://github.com/weinstockj/htslibr.git weinstockj/htslibr
cd weinstockj/htslibr/
git submodule update --init --recursive
cd htslibr/
R -e 'install.packages("Rcpp")'
R CMD build .

Travis失败,并显示一条错误消息,提示它找不到htslibr/src子目录中的头文件。为什么R CMD构建无法在Travis上找到标头(再次,本地没有问题)?

Travis设置为here,在本地我也使用Ubuntu 16.04。

1 个答案:

答案 0 :(得分:0)

以下是失败的构建日志的摘录:

mkdir -p /tmp/Rtmpy1bhv4/Rinst23036acf1e4/htslibr/inst/include
cp htslib/htslib/*.h /tmp/Rtmpy1bhv4/Rinst23036acf1e4/htslibr/inst/include
g++ -std=gnu++11 -I"/home/travis/R-bin/lib/R/include" -DNDEBUG  -I"/usr/local/lib/R/site-library/Rcpp/include" -I/home/travis/R-bin/include   -fpic  -g -O2 -c RcppExports.cpp -o RcppExports.o
g++ -std=gnu++11 -I"/home/travis/R-bin/lib/R/include" -DNDEBUG  -I"/usr/local/lib/R/site-library/Rcpp/include" -I/home/travis/R-bin/include   -fpic  -g -O2 -c util.cpp -o util.o
util.cpp:2:24: fatal error: htslib/hts.h: No such file or directory

我们看到,虽然将标头复制到/tmp/Rtmpy1bhv4/Rinst23036acf1e4/htslibr/inst/include,但此目录不在包含路径上。您可以通过添加

来解决此问题
PKG_CPPFLAGS = -I../inst/include -DSTRICT_R_HEADERS

Makevars(不需要"best practice"STRICT_R_HEADERS),并在#include <hts.h>中使用util.cpp。但是,我不认为首先将头文件复制到inst/include是正确的。毕竟,这些头文件并不表示您的包正在提供给其他包的API。相反,它是您打包使用的内部库的API。因此,我建议不要复制头文件并使用

PKG_CPPFLAGS = -Ihtslib -DSTRICT_R_HEADERS
Makevars

顺便说一句,Writing R Extensions提倡对目标使用不同的使用模式:

all: $(SHLIB)
$(SHLIB): <any other needed targets>

如果您按照我的建议不复制标题,那么这一点无关紧要。