【问题标题】:Is there any way to change gcc compilation options for a gem?有什么方法可以更改 gem 的 gcc 编译选项吗?
【发布时间】:2011-07-20 12:11:41
【问题描述】:

我正在努力安装 RedCloth gem。当我输入

gem install RedCloth

我明白了:

[…]
ragel/redcloth_attributes.c.rl: In function ‘redcloth_attribute_parser’:
ragel/redcloth_attributes.c.rl:26:11: error: variable ‘act’ set but not used [-Werror=unused-but-set-variable]
cc1: all warnings being treated as errors

make: *** [redcloth_attributes.o] Error 1 
[…]

原因是 RedCloth gem 的 extconf.rb 中传递给 gcc 的 -Werror 编译选项:

require 'mkmf'
CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
[…]

问题是当我从文件中删除 -Werror 选项时,它会在我下次启动“gem install”命令时自动重新出现。

如何永久取消设置 -Werror 选项?


另一个选择是降级到 gcc 4.5.2,但它不在我的 Fedora 15 的存储库中。

而且我宁愿避免从源代码编译它……

非常感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails gcc gem


    【解决方案1】:

    遇到了同样的问题,解决方法如下:

    $ sudo gem install RedCloth -- --with-cflags=\"-O2 -pipe -march=native -Wno-unused-but-set-variable\"
    

    如果您有多个参数,则必须转义引号。

    【讨论】:

    • 甜,它有效!有没有办法把它放在 Gemfile 中,这样项目中的其他人就不必单独安装 gem?
    • 我有一个与gem install rbczmq 类似的问题,由“attributed-deprecated”警告引起;但传入-Wno-deprecated-declarations 不起作用。我不得不更新实际的 c 头文件。
    • 试图编辑它但被拒绝了,所以这里是 - @Olivier,如果你不使用像 RVM 这样的 Ruby 版本管理器,那么在命令行前面加上 sudo 是有意义的(这使得将 Ruby gems 安装为非特权帐户)。我认为假设普通用户可以安装 gems 是不好的。在许多情况下,这是不正确的。也许这就是你对根前缀 # 的意思?在这种情况下,我认为明确这一点是有意义的。
    • 感谢您的反馈。我添加了sudo
    【解决方案2】:

    如果您使用的是bundler,则可以使用以下方法:

    bundle config build.RedCloth --with-cflags=\"-O2 -pipe -march=native -Wno-unused-but-set-variable\"
    

    【讨论】:

    • 是的,这适用于另一个丢失的宝石 linux/inet_diag.h: bundle config build.raindrops --with-cflags=\"-I/.../kernel-x.y.z/.../usr/include\"
    猜你喜欢
    • 2019-06-15
    • 2013-03-20
    • 1970-01-01
    • 2014-03-06
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多