我正在创build一个使用第三方(封闭源代码)API的R包,用于将.edf文件导入R(来自SR Research Eyelink眼动仪)。 已经得到这个在Linux工作的人已经分享了他的代码,并且我能够在Mac上使用它。 这是一个更改src / Makevars文件指向API的安装在mac上的问题:
PKG_LIBS=-framework edfapi -F/Library/Frameworks/
要使其在Linux中工作,Makevars需要:
PKG_LIBS=-L/usr/local/lib -ledfapi -lm
我知道,对于特定于Windows的选项,我需要创build一个Makevars.win文件,但是如何改变Mac和Linux的构build选项? 我想做一些事情:
if [[ `uname` -eq Darwin ]] ; then PKG_LIBS=-framework edfapi -F/Library/Frameworks/ fi if [[ `uname` -eq Linux ]] ;then PKG_LIBS=-L/usr/local/lib -ledfapi -lm fi
但把它放入Makevars是行不通的。 从研究这个看来,我需要在configure
和Makevars
的设置选项的组合,但我还没有弄明白。 我对R编程感到满意,并且知道C ++只是做了一些基本的function,但是我仍然不明白构build过程中涉及的所有细微差别。 如果有人可以解释configure/configure.ac
与Makevars/Makevars.in
的主要目的,这也会有所帮助。
理想情况下,我想将API与R软件包捆绑在一起,并在平台特定的文件夹中包含不同的版本。 该API只包含3个头文件和一个二进制文件(很less更改)。 我意识到这会阻止我将程序包放在CRAN上,但这很好。 我已经成功地在不同的文件夹中构build了包含API文件的包,但是在运行时它仍然在标准点(/ Library / Frameworks)中查找它。 我意识到这是一个更加加载的问题,我也可以创build一个单独的post。
这篇文章帮我弄明白了: stackoverflow.com/a/32590600/1457051
配置(在包的根目录下)如下所示:
#!/bin/bash #make the Makevars file if [ ! -e "./src/Makevars" ]; then touch ./src/Makevars fi #if mac if [[ `uname` -eq Darwin ]] ; then echo "PKG_LIBS=-framework edfapi -F/Library/Frameworks/" > ./src/Makevars #if linux elif [[ `uname` -eq Linux ]] ;then echo "PKG_LIBS=-L/usr/local/lib -ledfapi -lm" > ./src/Makevars fi
Makevars被创建,并且基于平台添加适当的选项。 可能有一个更直接的解决方案,但这适用于我的目的。