Я пытаюсь понять роль и соотношение макросов/переменных, установленных в ~/.R/Makevars
и package_directory/src/Makevars
при установке/создании собственных пакетов R. Предположим, что эти файлы выглядят как
~/.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
Как я понимаю, с CXX
мы можем выбрать компилятор для С++ при создании пакетов R, а CXXSTD
мы выбрали стандарт, а с CXXFLAGS
добавим флаги компилятора. С PKG_CPPFLAGS
мы добавляем флаги для препроцессора С++ и CXX_STD
говорим, что наши пакеты используют С++ 11.
У меня есть следующие вопросы:
- Какова связь между
CXX
иCXX98
,CXX11
иCXX14
? - В чем смысл, например,
CXX11STD = -std=c++11
, если С++ 11 уже подразумевается? Это между выбором-std=c++11
и-std=gnu++11
? Следует ли избегать-std=gnu++11
по причинам мобильности? - Невозможно добавить флаги для
CXXSTD
иCXXFLAGS
вCXX
, чтобы первые три строки уменьшались доCXX = g++ -std=c++11 -fsanitize=undefined,address -fno-omit-frame-pointer
. В чем заключается преимущество в объясненииCXXSTD
иCXXFLAGS
? - Как работает
CXX_STD = CXX11
? КакCXX11
здесь связано сCXX11
в~/.R/Makevars
? - Какая связь между
CXXFLAGS
иPKG_CXXFLAGS
(не включена в мой пример)?
Я знаю информацию, содержащуюся в Написание R-расширений и R Установка и администрирование, но я не могу извлечь больше информации за пределы моего нынешнего уровня понимания, чтобы ответить на вышеуказанные вопросы.
Я добавляю тег Rcpp
, потому что я полагаю, что ответы на эти вопросы будут наиболее важны для пользователей Rcpp
, но я знаю, что это, вероятно, напрямую не связано с Rcpp
, поэтому тег может удаляться, если сочтет это целесообразным.