我正在使用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没有这样的要求。这就是它的报道。
现在尽管如此,它实现了我想要的东西,它让终端变得凌乱。有什么方法可以保持安静吗?
答案 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