Друзья,
Есть ли автоматический способ генерации Makevars
а также configure
? Я компилирую свой код C ++, используя терминал bash с г ++ компилятор.
пример: У меня есть следующий код, написанный с использованием 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
файл с содержанием чуть выше. Однако я не уверен, есть ли способы сделать это автоматически, используя операторы сборки, представленные ранее.
Задача ещё не решена.
Других решений пока нет …