分页: 1 / 1
如何设置errorformat捕捉gfortran 输出的错误?
发表于 : 2006-05-19 12:45
由 vliqi
gfortran的输出如下
代码: 全选
E:\test>gfortran main.f90
In file main.f90:7
write(*,*'AAAAAAAAA!'
1
Error: Syntax error in WRITE statement at (1)
In file main.f90:9
write(*,*
1
Error: Syntax error in WRITE statement at (1)
E:\test>
第一行很容易捕捉,但是如何忽略第二行(空行)和第三行(出错行,没有任何规律),第四行输出的“1”可以得到出错的列数(用%p1已经捕捉到),第四行还没有实现。[/code]
发表于 : 2006-05-19 14:41
由 eexpress
写个bash。作为命令的管道就是了。bash里面可以处理这些。
grep也可以。要1,4? 还是要出错的行号?你把需要的用颜色标记出来吧。
发表于 : 2006-05-19 18:05
由 vliqi
E:\test>gfortran main.f90
In file main.f90:7
write(*,*'AAAAAAAAA!'
1
Error: Syntax error in WRITE statement at (1)
In file main.f90:9
write(*,*
1
Error: Syntax error in WRITE statement at (1)
E:\test>
其中红色的行时我需要的,绿色的是没有用的,但是我是想用VI自己处理,因为VI通过设置errorformat就可以实现编译之后直接定位到相应的错误行。
发表于 : 2006-05-20 17:42
由 roylez
我在网上搜了下,没有找到gfortran的errorformat样本。有个日本人曾经试着写过,但是不能成功捕捉%m。我试了半天,也是一样,也许你可以给维护fortran syntax file和compiler file的ajit(ajit @ unb . ca )发信,让他给g95写一个。我曾经为fortran的syntax file骚扰过他一次,因为他是加拿大的教授,所以还有些不大好意思。其实vim自己就带了几个fortran编译器的errorformat文件,在$VIMRUNTIME/compiler/下,大多是ajit写的。网上还有intel fortran compiler的errorformat,虽然是写给8.0的,但是我试过,同样适用于ifort 9.0。
把日本人的关于gfortran的errorformat的讨论贴在下面。
代码: 全选
From: Kamaraju Kusumanchi <kamaraju@...>
Date: Fri Apr 29, 2005 6:26 pm
Subject: error format for gfortran kamaraju@...
Send Email Send Email
Hi
I am struggling with writing an errorformat for gfortran (gcc
compiler for fortran). I am wondeing if anyone can help. Consider the
samecode
program welcome
implicit none
write(*,*) 'welcome'
some
end program welcome
I added the line some to produce an error message.
$gfortran welcome.f90
In file welcome.f90:5
some
1
Error: Unclassifiable statement at (1)
For this error I tried to write the compiler plugin with the
errorformat string set to
CompilerSet errorformat=
\%E\ In\ file\ %f:%l,
\%C\ %p%*[1],
\%CError:\ %m,
\%Z
But for some reason I am not able to catch that error message. Can
anyone help me please?
raju
发表于 : 2006-05-21 9:27
由 vliqi
这是我仿照g77写的,可以解决大部分问题。
代码: 全选
" Vim compiler file
" Compiler: gfortran (GNU Fortran 90)
" Maintainer: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
" Last Change: $Date: 2002/06/12 09:17:11 $
" $Revision: 1.7 $
if exists("current_compiler")
finish
endif
let current_compiler = "fortran_gfortran"
if exists(":CompilerSet") != 2 " older Vim always used :setlocal
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo-=C
" Note: The errorformat assumes GNU make
" sample multiline errors (besides gcc backend one-liners):
" gev.f:14:
" parameter UPLO = 'Upper-囗囗囗囗囗囗囗囗'
" ^
" Unsupported VXT statement at (^)
" gev.f:6:
" integer desca( * ), descb( * )
" 1
" gev.f:19: (continued):
" end subroutine
" 2
" Invalid declaration of or reference to symbol `desca' at (2) [initially seen at (1)]
CompilerSet errorformat=
\%Omake:\ %r,
\%f:%l:\ warning:\ %m,
\%A%f:%l:\ (continued):,
\%W%f:%l:\ warning:,
\%A\ In\ file\ %f:%l,
\%-C,
\%-C%p%*[0123456789^]%.%#,
\%-C\ %.%#,
\%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
\%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
\%DMaking\ %*\\a\ in\ %f,
\%Z%m\ at\ (%*[0123456789^])
let &cpo = s:cpo_save
unlet s:cpo_save
缺陷有:1.出现错误的那一行不能顶格写,前面要有空格,一般是可以做到的。2.不能区分出error和warning。
慢慢改进吧,下面是效果图。