首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态设置PKG_LIBS和PKG_CPPFLAGS

动态设置PKG_LIBS和PKG_CPPFLAGS
EN

Stack Overflow用户
提问于 2016-09-15 05:03:41
回答 1查看 2.1K关注 0票数 0

在Windows机器上使用RCPP和RStudio/RTools,我已经创建了一个对NYC地址进行批量地理编码的包。该软件包使用来自NYC DCP Geosupport地理编码软件的DLL和C头文件,该软件是免费的。我很想分享我的包,但是当涉及到Makevars/Makevars.win文件中的路径时遇到了障碍。因为我是在我自己的机器上运行这个程序,所以我可以找到地理编码软件在我机器上的安装位置,并将以下信息用于我的Makevars/Makevars.win文件:

代码语言:javascript
复制
##path 1 = location of NYCgeo.dll file after GBAT install
PKG_LIBS = -L"C:/Program Files/Geosupport Desktop Edition/Bin" -lNYCgeo 
##path 1 = location of NYCgeo.h and pac.h files after GBAT install
PKG_CPPFLAGS =  -I"C:/Program Files/Geosupport Desktop Edition/Include"

如果我共享这个包,我需要这个过程是动态的,因为用户可能会将地理编码软件安装在与我不同的位置。在地理编码软件安装过程中设置了一个名为GEOFILES的环境变量:

代码语言:javascript
复制
Sys.getenv("GEOFILES")
[1] "C:\\Program Files\\Geosupport Desktop Edition\\fls\\"

我想知道是否有一种方法可以使用这个变量来设置PKG_LIBS和PKG_CPPFLAGS...可能是这样的:

代码语言:javascript
复制
Sys.setenv("PKG_LIBS"=paste0("-L'",gsub("\\\\", "/", gsub("fls.*$","Bin",Sys.getenv("GEOFILES"))),"' -lNYCgeo"))

Sys.setenv("PKG_CPPFLAGS"=paste0("-I'",gsub("\\\\", "/", gsub("fls.*$","Include",Sys.getenv("GEOFILES"))),"'"))

如果这是可能的,我应该把R代码的前面几行放在哪里?它们会出现在Rcpp.Exports.R文件中吗?我假设通过动态设置PKG_LIBS和PKG_CPPFLAGS,将不再需要Makevars/Makevars.win文件。

编辑:嗨,德克。我注意到有几个包在makevars/makevars.win文件中使用环境变量。我的问题是我需要修改我的环境变量(用"Bin“代替”PKG_LIBS“,用"src”代替PKG_CPPFLAGS)。我的shell脚本很弱,所以我认为我可以在R中应用正则表达式和设置环境。虽然我的机器是Windows,但我希望我的包可以与其他操作系统一起使用。

谢谢。格雷琴

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-30 06:09:40

德克的书中的166-167页给出了答案。我需要创建一个configure.win文件:

代码语言:javascript
复制
#check if Geosupport  software is installed
if test -z "${GEOFILES}"; then
  echo "Please install Geosupport Software"
  exit 1
fi

GC_ROOT="$(echo ${GEOFILES} | sed 's/\\/\//g')"
GBAT_PATH="$(echo ${GC_ROOT} | sed 's/\/fls\///g')"


#check if installation is valid (i.e., dll is where it is supposed to be)
if [ -e "${GBAT_PATH}/Bin/NYCgeo.dll" ]; then
  GBAT_DLL="NYCgeo"
else
  echo "Please reinstall Geosupport Software"
  exit 1
fi

# replace all in Makevars.win
sed -e "s#@GBAT_PATH@#${GBAT_PATH}#g" -e "s#@GBAT_DLL@#${GBAT_DLL}#g"  \
src/Makevars.win.in > src/Makevars.win

..。以及src目录中的Makevars.win.in文件:

代码语言:javascript
复制
GBAT_PATH = @GBAT_PATH@
GBAT_DLL = @GBAT_DLL@

##path 1 = location of NYCgeo.dll file after GBAT install
PKG_LIBS = -L"$(GBAT_PATH)/Bin" -l$(GBAT_DLL)

##path 1 = location of NYCgeo.h and pac.h files after GBAT install
PKG_CPPFLAGS =  -I"$(GBAT_PATH)/Include"

编译包时,会在src目录中创建一个Makevars.win文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39499608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档