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
etCXX98
,CXX11
etCXX14
? - 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
etCXXFLAGS
de ne pas êtreCXX
, 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écifierCXXSTD
etCXXFLAGS
? - Comment est -
CXX_STD = CXX11
travail? Comment est -CXX11
ici liés à l'CXX11
en~/.R/Makevars
? - Quelle est la relation entre
CXXFLAGS
etPKG_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é.