- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解 ~/.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
PKG_CPPFLAGS = -I../inst/include
CXX_STD = CXX11
CXX
我们可以在构建 R 包时选择 C++ 的编译器,使用
CXXSTD
我们选择了标准和
CXXFLAGS
我们添加编译器标志。与
PKG_CPPFLAGS
我们为 C++ 预处理器和
CXX_STD
添加标志我们告诉我们我们的包使用 C++11。
CXX
有什么关系和 CXX98
, CXX11
和 CXX14
? CXX11STD = -std=c++11
的含义是什么?如果 C++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
(不包括在我的例子中)? Rcpp
标记,因为我认为这些问题的答案与
Rcpp
的用户最相关。 ,但我知道这可能与
Rcpp
没有直接关系。 ,因此如果认为合适,标签可能会被删除。
最佳答案
Makevars
文件,如 Writing R Extensions: 1.2.1 Using Makevars 中所指定, 是 Make
的变体这是 R 独有的。您列出的许多变量都称为 implicit variables .其含义如下:
Implicit rules tell make how to use customary techniques so that you do not have to specify them in detail when you want to use them.
CC Program for compiling C programs; default ‘cc’.
CXX Program for compiling C++ programs; default ‘g++’.
CPP Program for running the C preprocessor, with results to standard output; default ‘$(CC) -E’.
FC Program for compiling or preprocessing Fortran and Ratfor programs; default ‘f77’.
CFLAGS Extra flags to give to the C compiler.
CXXFLAGS Extra flags to give to the C++ compiler.
CPPFLAGS Extra flags to give to the C preprocessor and programs that use it (the C and Fortran compilers).
FFLAGS Extra flags to give to the Fortran compiler.
LDFLAGS Extra flags to give to compilers when they are supposed to invoke the linker, ‘ld’, such as -L. Libraries (-lfoo) should be added to the LDLIBS variable instead.
LDLIBS Library flags or names given to compilers when they are supposed to invoke the linker, ‘ld’. LOADLIBES is a deprecated (but still supported) alternative to LDLIBS. Non-library linker flags, such as -L, should go in the LDFLAGS variable.
CXX98 CXX98STD CXX98FLAGS CXX98PICFLAGS
CXX11 CXX11STD CXX11FLAGS CXX11PICFLAGS
CXX14 CXX14STD CXX14FLAGS CXX14PICFLAGS
CXX17 CXX17STD CXX17FLAGS CXX17PICFLAGS
What is the relationship between
CXX
andCXX98
,CXX11
andCXX14
?
CXX
是要使用的通用编译器选项。同时,R 定义了额外的
CXX
根据检测到的编译标准使用的选项。也就是说,如果
-std=c++98
(
CXX98
语言规范)由
CXX_STD
设置,然后是与
CXX98
关联的编译器用来。同样,对于
CXX11
和
CXX14
,同样的逻辑。见
Rcpp Gallery: Using Rcpp with C++11, C++14 and C++17更多细节。
What is the meaning of, e.g.,
CXX11STD = -std=c++11
if C++11 is already implied? Is it between choosing-std=c++11
and-std=gnu++11
? Should-std=gnu++11
generally be avoided for portability reasons?
CXX11STD
的含义是为 C++11 编译确定合适的语言标准。这个选项的存在仅仅是因为如果 R 版本选择适当的 C++11 编译选项对编译器不正确,您可以更改它。存在这种情况的原因是因为每个编译器可能定义的 C++11 支持与下一个略有不同,如
R Installation and Administration: 2.7.2 C++ Support 所示。 :
It may be [Footnote 13] that there is no suitable flag for C++11 support, in which case a different compiler could be selected for CXX11 and its corresponding flags.
This is true for earlier versions of g++ such as 4.2.1, and also for commonly-used versions of the Solaris compiler CC.
-std=c++11
因为大多数编译器都支持这个声明。
Could the flags for
CXXSTD
andCXXFLAGS
not just be added toCXX
, such that the first three lines reduce toCXX = g++ -std=c++11 -fsanitize=undefined,address -fno-omit-frame-pointer
. What is the advantage in explicitly specifyingCXXSTD
andCXXFLAGS
?
CXX = g++ -std=c++11 -fsanitize=undefined,address -fno-omit-frame-pointer
CXX = g++
CXX11STD = -std=c++11
CXXFLAGS = -fsanitize=undefined,address -fno-omit-frame-pointer
CXX_STD
在
CXXSTD
包装时如图
Writing R Extensions: Section 1.2.4 Using C++11 Code .这只是为了确保 R 将包注册为需要 C++xy。另一种方法是写在
DESCRIPTION
归档属性
SystemRequirements: C++xy
,其中
xy
表示年份。
How does
CXX_STD
=CXX11
work? How isCXX11
here related toCXX11
in ~/.R/Makevars?
CXX11
设置的 C++11 编译器设置语言的编译和链接。 .通过指定
CXX11
,您正在指定
variable in Make
这将用于编译配方下的文件:
$(OBJCXX) $(ALL_CPPFLAGS) $(ALL_OBJCXXFLAGS) -c $< -o $@
$(OBJCXX)
是
CXX
,
$(ALL_CPPFLAGS)
由
$(R_XTRA_CPPFLAGS) $(PKG_CPPFLAGS) $(CLINK_CPPFLAGS) $(CPPFLAGS)
给出, 和
$(ALL_OBJCXXFLAGS)
有
$(PKG_OBJCXXFLAGS) $(CXXPICFLAGS) $(SHLIB_CXXFLAGS) $(OBJCXXFLAGS)
.
/R/Makeconf.in
.但是,例程可能是
/m4/R
.
What is the relationship between
CXXFLAGS
andPKG_CXXFLAGS
(not included in my example)?
Makevars
中的写入顺序是不同的。特别是,我们有
CXXFLAGS
placed after PKG_CXXFLAGS
.
始终使用最正确的选项。 所以,
CXXFLAGS
优先于
PKG_CXXFLAGS
.
PKG_*
上有一个简短的说明
Writing R Extensions: Section 5.5 Creating shared objects 中的选项.
Is it correct that variables defined in
~/.R/Makevars
apply globally to the installation of all packages, while variables in/src/Makevars
only apply to the present package?
~/.R/Makevars
内的变量将适用于所有软件包,而
/src/Makevars
每个包附带的只会影响该包的设置。
/src/Makevars
中的值将优先于
~/.R/Makevars
.
/src/Makevars.win
,它提供了一个
Makevars
专门针对 Windows 环境的文件。
Is the compilation standard used for a packages nowadays only set via
CXX_STD
and not any more byPKG_CXXFLAGS
as shown in gallery.rcpp.org/articles/simple-lambda-func-c++11?
CXX_STD
仅在包环境中运行。与此同时,与其名称相反,
PKG_CXXFLAGS
, 影响所有编译选项。因此,当您引用上述 Rcpp 画廊帖子时,您正在观察正在运行的独立脚本。要快速进入正确的模式,这需要
PKG_CXXFLAGS
要设置而不是
CXX_STD
定义。
PKG_CXXFLAGS
的使用是有点老派。事实上,R 3.4 中的首选方法是设置环境变量
USE_CXX11 = "yes"
.在 R 3.1 和 R 3.3 之间,标准是设置环境变量
USE_CXX1X = "yes"
.在这些实例之前,使用
PKG_CXXFLAGS ="-std=c++11"
首选。 (除了在 Windows 上,它需要
PKG_CXXFLAGS ="-std=c++0x"
。)
Does using
CXX_STD=CXX11
then mean to use all the settings given byCXX
,CXXSTD
,CXXFLAGS
andCXX11PICFLAGS
?
CXX11 CXX11STD CXX11FLAGS CXX11PICFLAGS
关于r - 了解 R 中 Makevars 文件的内容(宏、变量、~/.R/Makevars 和 pkg/src/Makevars),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43597632/
我试图了解 ~/.R/Makevars 中设置的宏/变量的作用和关系和 package_directory/src/Makevars安装/构建自己的 R 包时。假设这些文件看起来像 ~/.R/Make
问题 我试图告诉我的包使用 gcc 来编译 C++ 代码而不是 clang。为什么我的 Makevars 文件中的 CXX 标志没有被使用? (我期待/希望解决方案是我忽略的非常简单的东西。) 据我了
我正在尝试在 Centos 6 上安装 R 包“lubridate”。因为 lubridate 需要比 Centos 6 上的标准编译器更新的 g++ 版本,所以我下载并编译了 gcc 4.9 版本(
我写了一个C++包“P”。它有一个 R 接口(interface)包“RP”,使用 Rcpp 构建。 P 直接使用 Make 进行编译,但为了可移植性而切换到 CMake。 CMake 用于查找系统范
我们的 R 安装定义为: R$HOME/etc/Makeconf that CC = gcc -std=gnu99 我有一个特定的包(C++ 和 C 代码的混合)需要使用 CC = gcc 没有
我没有 ~/.R/Makevars文件和 > tools::makevars_user() character(0) > tools::makevars_site() character(0) 然而,
我想在 Rcpp 项目的 Makevars 中将 C++ 编译器标志设置为 -O0。 如果我看一下/etc/R/Makeconf,我发现编译命令似乎是 $(CXX) $(ALL_CPPFLAGS) $
我已经查看了多个地方,但没有找到一个简单的例子来解决我的问题。 我需要的是能够使用我拥有的多个 .so 文件(连同 .h 文件)。 一个简单的例子是: 我有以下文件:a.h、a.cpp 函数 jede
我有一个 R 包,我将包含矩阵代数的 MCMC 算法移动到了 C++使用 RcppEigen包大大提高了速度。 然而,R CMD check给出以下 NOTE在 Linux ( Thanks to R
作为我博士项目的一部分,我完全重新设计了 R 包的早期草案 quantspec .我上传了通过 BUILD 获得的 tar.gz 文件后,使用 webform 在我的 Windows 7 计算机上通过
我正在开发一个包,其中包含来自第三方库 (SUNDIALS) 的 C 代码。该包编译和工作(即,能够解决测试 ODE)与以下 Makevars 文件执行静态链接 CXX=clang++ PKG_CPP
我试图了解在安装/构建自己的R包时在~/.R/Makevars和package_directory/src/Makevars中设置的宏/变量的作用和关系。假设这些文件看起来像 〜/ .R / Make
我有这个独立的 C++ 代码我正试图用 R 包装包。 我的问题是我绝对希望它与-O3 标志开启。 所以在 src/Makevars 文件中我说: PKG_CPPFLAGS = -I../inst/in
根据Rcpp FAQ (2.15。新的“无链接”功能如何),自 Rcpp 版本 0.11.0 以来,我们可以避免在 Makevars 文件中指定 LAPACK/BLAS/Fortran,事实上,如果我
通常当我从源代码安装 R 包时,它是一个 *.tar.gz 文件。我想弄乱一些 ./src/Makevars 标志而不解压缩,编辑 Makevars,重新压缩,然后安装。所以我正在尝试使用 R CMD
我正在 Mac OSX 上开发一个 R 包,带有一些低级 C/C++ 代码和 openMP 支持。 C++代码是使用Rcpp包编写的。我的全局“Makevars”文件位于 ~/.R/ 文件夹下。该文件
我是一名优秀的程序员,十分优秀!