仅使用预处理器时,禁止将gcc输出到终端

时间:2012-06-11 07:18:11

标签: perl gcc c-preprocessor newline verilog

我正在使用gcc的预处理程序从verilog(.v)文件中删除注释(因为注释语法与 C / C ++相同)。我正在使用perl,因此使用了我的perl脚本中的shell命令

gcc -E $dest > $commentsrem

其中gcc -E $dest > $commentsrem是我的verilog文件,重命名为.c文件。 由于预处理器将数据输出到stdout,我将其重定向到名为$dest 的文件。 现在我遇到的问题是我在终端上收到消息说

  

try.c:577:未终止的字符常量

我想这是因为虽然在 C 中你需要使用'\'在新行上继续声明,但verilog没有这样的要求。这就是它的报道。

现在尽管如此,它实现了我想要的东西,它让终端变得凌乱。有什么方法可以保持安静吗?

2 个答案:

答案 0 :(得分:1)

将标准错误重定向到空设备会使预处理器的所有错误输出静音。通常不推荐,因为您也不会看到真正的错误。

gcc -E $dest > $commentsrem 2> /dev/null

更好的方法是使用grep -v从stderr过滤已知的消息,这样您仍会看到其他错误消息。为此,您需要将stderr重定向到stdout,因为管道在stderr上不起作用:

gcc -E $dest 2>&1 > $commentsrem | grep -v "unterminated character constant"

重定向的顺序在这里很重要。如果您撰写了> $commentsrem 2>&1,则错误消息最终会以$commentsrem结尾。

有关重定向的详细信息,请参阅。 this Q/A

答案 1 :(得分:1)

由于您使用的是Perl,因此vppreproc脚本可用于删除Verilog注释。

vppreproc --nocomment in.v > out.v