2

我正在尝试为 Ruby 编写一个 c++ 扩展。除了主文件,我还有一个文件extconf.rb

require "mkmf"
$libs += " -lstdc++ "
create_makefile("file_name")

并且,在完成之后ruby extconf.rb,当我尝试g++通过键入来编译它时make,我收到警告:

cc1plus: warning: command line option "-Wdeclaration-after-statement" is valid for C/ObjC but not for C++

我读到它没有害处,但是有没有办法避免这个警告?这里有一个人有同样的问题但找不到解决方案。

4

2 回答 2

9

在你的试试这个extconf.rb

$warnflags.gsub!('-Wdeclaration-after-statement', '') if $warnflags

if $warnflags是必需的,因为mkmf在 Ruby 1.9.3 中进行了更改;没有它,undefined method `gsub!' for nil:NilClass如果您尝试在 Ruby 1.9.2 上构建,您将得到。但是,您不应该在 1.9.2 中收到 c++ 警告:Ruby 使用的默认警告在 1.9.3 中已更改,并且已添加这些警告。

更新:

这可能更好:

CONFIG['warnflags'].gsub!('-Wdeclaration-after-statement', '')

$warnflags从中填充,但这不需要if $warnflagsfor < 1.9.3。

于 2012-04-15T19:10:52.367 回答
4

编辑Makefile运行后创建的结果并从那里create_makefile删除。-Wdeclaration-after-statement

于 2012-04-15T18:50:41.400 回答