Автоматическая генерация Makevars и настройка файлов - PullRequest
0 голосов
/ 16 мая 2018

Друзья,

Существует ли автоматический способ генерации Makevars и configure? Я компилирую свой код C ++, используя терминал bash с компилятором g ++ .

Пример : у меня есть следующий код, написанный с использованием библиотеки Rcpp.h, где я использую заголовочный файл gsl/gsl_sf_bessel.h, то есть я использую библиотеку, внешнюю по отношению к Rcpp .

#include <Rcpp.h>
#include <gsl/gsl_sf_bessel.h>
using namespace Rcpp;

// [[Rcpp::export]]
double my_bessel(double x){
   return gsl_sf_bessel_J0 (x);
}

В приведенном выше примере, учитывая конфигурации и путь к файлам заголовков моего компьютера, я могу скомпилировать приведенный выше код, используя приведенный ниже код в терминале bash:

g++ -I"/usr/include/R/" -DNDEBUG -I"/home/pedro/R/x86_64-pc-linux-gnu-library/3.5/Rcpp/include" -I"/home/pedro/Dropbox/UFPB/Redes Neurais e Análise de Agrupamento/Rcpp" -D_FORTIFY_SOURCE=2  -fpic  -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt  -c program.cpp -o program.o
g++ -shared -L/usr/lib64/R/lib -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -o program.so program.o -L/usr/lib64/R/lib -L/usr/include/gsl -lR -lgsl -gslcblas -lm

На основании настроек и путей к библиотекам на моем компьютере я могу с помощью приведенного выше кода сгенерировать объектные файлы и файл .so. Однако, как мы знаем, эти пути не обязательно будут работать, когда функция скомпилирована на компьютере, отличном от пользователя пакета. Для этого есть Makevars и configure файлы.

Вопрос : Есть ли способ автоматически создавать файлы Makevars и configure на основе приведенных выше операторов сборки?

CXX=g++
CXXFLAGS +=`-O3 -Wall -pipe -Wno-unused -pedantic`
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"`  
PKG_LIBS += `gsl-config --libs`

Я создал файл Makevars с содержимым чуть выше. Однако я не уверен, есть ли способы сделать это автоматически, используя операторы сборки, представленные ранее.

...