Я создаю пакет R, который использует сторонний API (с закрытым исходным кодом) для импорта файлов .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, мне нужно создать файл Makevars.win, но как мне изменить параметры сборки для Mac и Linux? Я хотел бы сделать что-то вроде:
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 ++, чтобы выполнять некоторые основные функции, но я до сих пор не понимаю всех нюансов, связанных с процессом сборки. Если бы кто-то мог объяснить основную цель configure/configure.ac
против Makevars/Makevars.in
это также было бы полезно.
В идеале я хотел бы связать API вместе с пакетом R и иметь разные версии в папке для конкретной платформы. API состоит всего из 3 заголовочных файлов и двоичного файла (и он редко изменяется). Я понимаю, что это помешало бы мне поставить пакет на CRAN, но это нормально. Мне удалось успешно собрать пакет с файлами API в другой папке, но во время выполнения он все еще ищет его в стандартном месте (/ Library / Frameworks). Я понимаю, что это более загруженный вопрос, и я также могу создать отдельный пост.
Этот пост помог мне понять это: stackoverflow.com/a/32590600/1457051
configure (в корневом каталоге пакета) выглядит так:
#!/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 создан, и соответствующие опции добавляются в зависимости от платформы. Может быть более прямое решение, но это работает для моих целей.
Других решений пока нет …