Найдите общесистемные библиотеки в Rcpp Makevars - PullRequest
0 голосов
/ 11 мая 2018

Я написал C ++ пакет "P". Он имеет интерфейс R пакета "RP", построенный с использованием Rcpp. P использовал Make непосредственно для компиляции, но был переключен на CMake для переносимости. CMake используется для поиска заголовков (давайте назовем их коллекции HF) и статических библиотек (SL в оставшейся части настоящего поста) для общесистемных библиотек.

Я хочу обновить RP, чтобы иметь возможность зависеть от эволюции CMake P. В исходные тексты C ++ RP/src/*.cpp включены HF-элементы и, конечно, SL статически связаны.

Как лучше всего вызвать CMake в RP/src/Makevars для получения местоположений HF и SL? Смысл здесь не в том, чтобы заменить систему сборки Rcpp, а в том, чтобы использовать возможности поиска CMake.

На данный момент P (версия CMake) и RP собираются на моей машине с использованием ссылок на абсолютные пути в RP/src/Makevars, таких как:

INC_NLOPT = /usr/local/Cellar/nlopt/2.4.2_2/include
LIB_NLOPT = /usr/local/Cellar/nlopt/2.4.2_2/lib/libnlopt.a

Поскольку в настоящий момент мы используем RP для внутреннего использования, мы можем ожидать, что CMake, HF и SL будут установлены на каждой машине, на которой мы развернемся.

1 Ответ

0 голосов
/ 11 мая 2018

Решением было создать файл CMakeFileLists.txt в RP / src.В этом файле файл Libvar, содержащий необходимые пути к библиотекам, записывается с помощью команды CMake file.Libvar затем включается в Makevars с использованием include.

. Файл конфигурации в корне пакета выполняется, чтобы гарантировать, что Libvar генерируется перед каждым вызовом, выполняемым R.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...