86 votes

Comprendre le contenu de la Makevars fichier à R (macros, les variables, ~/.R/Makevars et pkg/src/Makevars)

Je suis en train d'essayer de comprendre le rôle et les relations des macros/jeu de variables en ~/.R/Makevars et package_directory/src/Makevars lors de l'installation/construction propre R paquets. Supposons que ces fichiers ressembler

~/.R/Makevars

CXX = g++
CXXSTD = -std=c++11
CXXFLAGS = -fsanitize=undefined,address -fno-omit-frame-pointer

CXX98 = g++
CXX98STD = -std=c++98

CXX11 = g++
CXX11STD = -std=c++11

CXX14 = g++
CXX14STD = -std=c++14

package_directory/src/Makevars

PKG_CPPFLAGS = -I../inst/include
CXX_STD = CXX11

Si je comprends bien, avec CXX , nous pouvons sélectionner le compilateur C++ lors de la construction de packages R, avec CXXSTD nous avons choisi la norme et avec CXXFLAGS nous ajoutons les drapeaux de compilation. Avec PKG_CPPFLAGS nous ajouter des drapeaux pour le préprocesseur C++ et avec CXX_STD - nous dire que nos forfaits utilise C++11.

J'ai les questions suivantes:

  • Quelle est la relation entre CXX et CXX98, CXX11 et CXX14?
  • Quel est le sens de l', par exemple, CXX11STD = -std=c++11 si C++11 est déjà implicite? Est-il entre le fait de choisir -std=c++11 et -std=gnu++11? Devrait - -std=gnu++11 généralement être évitée pour des raisons de portabilité?
  • Pourrait les drapeaux pour CXXSTD et CXXFLAGS de ne pas être CXX, de telle sorte que les trois premières lignes de réduire d' CXX = g++ -std=c++11 -fsanitize=undefined,address -fno-omit-frame-pointer. Quel est l'avantage explicitement spécifier CXXSTD et CXXFLAGS?
  • Comment est - CXX_STD = CXX11 travail? Comment est - CXX11 ici liés à l' CXX11 en ~/.R/Makevars?
  • Quelle est la relation entre CXXFLAGS et PKG_CXXFLAGS(non inclus dans mon exemple)?

Je suis conscient de l'information contenue dans l'Écriture d'Extensions de R et de R d'Installation et d'Administration, mais je ne suis pas en mesure d'extraire plus d'informations au-delà de mon niveau actuel de compréhension de répondre aux questions ci-dessus.

Je suis l'ajout d'un Rcpp balise parce que je suppose que les réponses à ces questions seront les plus pertinents pour les utilisateurs d' Rcpp,, mais je suis conscient que ce n'est probablement pas directement liés à l' Rcpp, de sorte que la balise peut être retiré s'il est jugé approprié.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X