我正在尝试为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++
我读到它没有害处,但有没有办法避免这种警告?有一个人有同样的问题here,但无法找到解决方案。
答案 0 :(得分:9)
在extconf.rb
:
$warnflags.gsub!('-Wdeclaration-after-statement', '') if $warnflags
需要if $warnflags
,因为在Ruby 1.9.3中更改了mkmf
;没有它,如果你试图在Ruby 1.9.2上构建,你将获得undefined method `gsub!' for nil:NilClass
。您不应该在1.9.2中获得c ++警告:Ruby使用的默认警告在1.9.3中已更改,并且已添加这些警告。
<强>更新强>
这可能更好:
CONFIG['warnflags'].gsub!('-Wdeclaration-after-statement', '')
从此填充 $warnflags
,但这不需要if $warnflags
for&lt; 1.9.3。
答案 1 :(得分:4)
修改运行Makefile
后创建的结果create_makefile
,然后从中删除-Wdeclaration-after-statement
。