更改 R CMD INSTALL 中的 CXXFLAGS 以开发 R 包

问题描述 投票:0回答:2

我正在尝试调试我正在开发的包。 我使用 makefile 来构建、检查和安装软件包。 这些软件包是一个 Rcpp 软件包,因此其中已经有一个 makevars 和 makevars.win 文件。 我正在寻找的是仅针对特定的 make 规则更改 CXXFLAGS 。 然后

make debug
将与
R CMD INSTALL
一起运行
CXXFLAGS= -Wall -pedantic -g -O0"
,但常规
make install
将与
CXXFLAGS=-O3
一起运行,没有任何调试信息。 有没有一种好方法可以动态更改此设置,而无需修改我的包、个人或系统 makevars 文件?

r rcpp
2个回答
4
投票

我不这么认为,因为只有一个

CXXFLAGS
可以走动。 但是您可以在不同的“make”与“make debug”目标部分中再次重新分配。

您可以只保留两个版本

~/.R/Makevars.normal
amd
~/R/Makevars.debug
并使用脚本来翻转它们之间的链接...

物有所值。我只是编辑

~/.R/Makevars
并注释/取消注释不同的行。

编辑:基于您发布的

Makefile
,这样的事情怎么样:

install: $(PKG_NAME)_$(PKG_VERSION).tar.gz
    CXXFLAGS+="-O3" R CMD INSTALL $(PKG_NAME)_$(PKG_VERSION).tar.gz

debuginstall: $(PKG_NAME)_$(PKG_VERSION).tar.gz
    CXXFLAGS+="-Wall -g -O0" R CMD INSTALL $(PKG_NAME)_$(PKG_VERSION).tar.gz

编辑2:我刚刚玩过这个,它有效:

PKG_NAME=digest
PKG_VERSION=0.5.1

install: $(PKG_NAME)_$(PKG_VERSION).tar.gz
    PKG_CFLAGS="-O6" R CMD INSTALL $(PKG_NAME)_$(PKG_VERSION).tar.gz

debuginstall: $(PKG_NAME)_$(PKG_VERSION).tar.gz
    PKG_CFLAGS="-Wall -g -O0" R CMD INSTALL $(PKG_NAME)_$(PKG_VERSION).tar.gz

still随后读取我的

~/.R/Makevars
,因此无法在此处设置某些变量。 但是您可以在
MYDEBUG=...
中设置
Makefile
,然后在
~/.R/Makevars
中的定义中使用它。


0
投票

包的

-O
文件中的任何
Makevars
标志都将被 R 的
-O2
文件中的
Makeconf
覆盖,因为 GCC 只会尊重编译命令中的最后一个
-O
标志。如果软件包分发到其他平台,Dirk 设置
~/.R/Makevars
文件的答案将不起作用,除非您可以告诉每个使用您的软件包的人创建或修改他们的
~/.R/Makevars

因为

-O3
-O2
+ 一些其他标志,所以你可以将你的包的
Makevars
写成如下:

PKG_CXXFLAGS += -fgcse-after-reload \
-fipa-cp-clone \
-floop-interchange \
-floop-unroll-and-jam \
-fpeel-loops \
-fpredictive-commoning \
-fsplit-loops \
-fsplit-paths \
-ftree-loop-distribution \
-ftree-partial-pre \
-funswitch-loops \
-fvect-cost-model=dynamic \
-fversion-loops-for-strides

即使背面有 -O2,这些标志(请参阅 GCC 手册

https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
)也会受到尊重。

根据我多年来在不同平台上的科学计算中使用这些标志的经验,由于积极的优化产生了更大的二进制文件,

-O3
几乎从未优于
-O2
。然而,以下几乎总是生成最快的代码:

PKG_CXXFLAGS += -march=native -ffast-math

请注意,

-ffast-math
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ffast-math)应谨慎使用。

© www.soinside.com 2019 - 2024. All rights reserved.