Я пытаюсь понять роль и соотношение макросов/переменных, установленных в ~/.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, поэтому тег может удаляться, если сочтет это целесообразным.