2015-09-15 26 views
6

Ho creato un nuovo pacchetto Rcpp (utilizzando RStudio). Questo pacchetto contiene una funzione C++ che viene compilato utilizzando le seguenti opzioni del compilatore:Come modificare e impostare gli argomenti di compilazione Rcpp

clang ++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include -I "/Library/Frameworks/R.framework/Versions/3.2/Resources/library/Rcpp/include" -fPIC -Wall -mtune = core2 - g -O2 -c RcppExports.cpp -o RcppExports.o

Vorrei modificare/impostare questi argomenti, ad esempio rimuovere -g, aggiungere -std=c++11 e modificare l'argomento -O2-012.. Inoltre, sarebbe meglio avere la possibilità di specificare queste modifiche una volta (per il pacchetto).

+0

Non è una domanda Rcpp (ma una domanda di compilazione del pacchetto R generica) e ha risposto in precedenza in diverse occasioni. Usa 'src/Makevars' o' ~/.R/Makevars'. –

risposta

3

Operando su Writing R Extension, Section 1.2, sembra che si dovrebbe essere in grado di gestirlo con un paio di script di shell. Come un esempio minimo, (che lavora su una macchina Linux), ho creato un pacchetto base da Rcpp::Rcpp.package.skeleton, e mettere i seguenti due file nella directory principale del progetto:

configurare

#!/bin/bash 
if [ ! -d "~/.R" ]; then 
    mkdir ~/.R; touch ~/.R/Makevars 
    echo "CXXFLAGS= -O3 -std=c++11 -Wall -mtune=core2" > ~/.R/Makevars 
elif [ ! -e "~/.R/Makevars" ]; then 
    touch ~/.R/Makevars 
    echo "CXXFLAGS= -O3 -std=c++11 -Wall -mtune=core2" > ~/.R/Makevars 
else 
    mv ~/.R/Makevars ~/.R/Makevars.bak_CustomConfig 
    echo "CXXFLAGS= -O3 -std=c++11 -Wall -mtune=core2" > ~/.R/Makevars 
fi 

pulizia

#!/bin/bash 
if [ -e "~/.R/Makevars.bak_CustomConfig" ]; then 
    mv -f ~/.R/Makevars.bak_CustomConfig ~/.R/Makevars 
fi 

e quindi li ha resi eseguibili (chmod 777 path/to/project/root/configure e chmod 777 path/to/project/root/cleanup). Quando ho fatto funzionare Costruire e Ricarica ho ottenuto (estratto):

g++ -m64 -I/usr/include/R -DNDEBUG 
-I/usr/local/include 
-I"/home/nr07/R/x86_64-redhat-linux-gnu-library/3.2/Rcpp/include" 
-fpic -O3 -std=c++11 -Wall -mtune=core2 
-c rcpp_hello.cpp -o rcpp_hello.o 

g++ -m64 -shared -L/usr/lib64/R/lib 
-Wl,-z,relro -o CustomConfig.so RcppExports.o rcpp_hello.o 
-L/usr/lib64/R/lib -lR 

che sostituisce i valori di default R Makevars, e usa le opzioni corrette.


Questo è solo un esempio di base, quindi probabilmente vorrebbe prendere un paio di passi avanti, a seconda dei tuoi obiettivi:

  1. Adattare gli script per diverse piattaforme (ad esempio Unix/Linux vs Windows/Windows 64-bit), che viene toccato nell'articolo collegato, credo.
  2. Verificare che l'impostazione delle autorizzazioni del file dal proprio computer sia sufficiente per eseguire questi file su un computer diverso (penso che funzionerà, ma non sono completamente positivo).