Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在安装R包时重写特定的编译器标志_R_Rscript_Install.packages - Fatal编程技术网

在安装R包时重写特定的编译器标志

在安装R包时重写特定的编译器标志,r,rscript,install.packages,R,Rscript,Install.packages,我有一个R脚本,它尝试安装许多软件包(省略了所有内容,但只显示了一个): 然后我就跑 Rscript my_r.r 然后,我注意到它将尝试编译一些C代码: gcc -m64 -std=gnu99 -I"/usr/include/R" -DNDEBUG -I../inst/include -I"/latest/rsg_comm/r_packages/zoo/include" -I/usr/local/include -fpic -O2 -g -pipe

我有一个R脚本,它尝试安装许多软件包(省略了所有内容,但只显示了一个):

然后我就跑

Rscript my_r.r
然后,我注意到它将尝试编译一些C代码:

gcc -m64 -std=gnu99 -I"/usr/include/R" -DNDEBUG -I../inst/include -I"/latest/rsg_comm/r_packages/zoo/include" -I/usr/local/include  -fpic  -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic  -c any.c -o any.o
是否有一种方法可以要求使用
-O3
-mtune=native
本地编译所有包

我注意到有一个建议使用
~/R/.Makevars
。但是看起来

  • 它将覆盖所有编译器标志,而不仅仅是我指定的2个。有没有办法具体说明
  • 我必须下载每个源代码的源代码包,这不如只使用
    install.packages(“package\u name”)
    方便,它将显示最新版本,并通过镜像等。还是有一种方便的方法

  • 您可以编辑.R/Makevars文件,并使用
    +=
    运算符附加所需的标志,例如

    CFLAGS+= -O3 -Wall -mtune=native -march=native
    
    如您在下面的评论中所说,如果存在冲突,则使用后一个标志。就从源代码编译而言,您可以通过
    install.packages()
    ,例如

    install.packages("package_name", type = "source")
    

    将这些标志添加到.R/Makevars文件不会覆盖所有标志,我也不希望它会导致任何问题。也许试一下,看看怎么样?如果出现错误,请进行相应调整。有趣的是,在我的Makevars中,我有
    -g-O3-Wall-pedantic-std=gnu99-mtune=native-pipe
    标志,并且对动物园软件包没有任何问题,尽管我使用的是macOS so YMMV()。@jared_mamrot感谢您的建议。我刚刚尝试在
    Makevars
    中用
    CFLAGS=-O3-Wall-mtune=native-march=native安装
    zoo
    。它替换了
    zoo
    包中完全指定的所有CFLAG,该包指定了
    -O2-g-pipe-Wall-Wp,-D_-FORTIFY_SOURCE=2-feexceptions-fstack protector strong--param=ssp buffer size=4-grecord gcc switches-m64-mtune=generic
    。我可以手动调整我的
    Makevars
    ,以获取剩余的标志。但这样做很痛苦,因为我有20多个软件包要安装。你知道如何自动“联合”这个
    CFLAGS
    吗?事实上,我从你和这件事中得到了一些启发。我使用
    Makevars
    将我的
    CFLAGS
    附加到现有的
    CFLAGS
    中,并期望
    gcc
    在发生冲突时使用后一个标志(根据帖子)。谢谢
    install.packages("package_name", type = "source")