Друзья,
Существует ли автоматический способ генерации 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
с содержимым чуть выше. Однако я не уверен, есть ли способы сделать это автоматически, используя операторы сборки, представленные ранее.