2

:makegfortranを使用してFORTRANコードをコンパイルするためにvimを使用しています。コンパイル エラー間をジャンプするクイックフィックス ウィンドウの機能が気に入っています。ここで提案されているgfortran のエラー形式を使用しています。

errorformat=%E%f:%l.%c:,%E%f:%l:,%C,%C%p%*[0123456789^],%ZError: %m,%C%.%#

ほとんどのエラーを検出します。以下を処理する可能性を追加したいと思います

  • 警告
  • リンカー エラー
  • (ボーナス) 2 つの場所に関連するエラー: (1) と (2)

少し前に Intel FORTRAN のエラーフォーマットを作成しようとしたときに、ドキュメントを読みました。おおよその結果だけを得るには、多くの時間がかかりました。警告 '%W' を追加することは、エラー メッセージと同じ構造であるため、それほど難しくないと思います。リンカー エラーについては、ソースとオブジェクトに別のフォルダーを使用し、vpath Makefile 機能を使用しているため、うまくいくかどうかわかりません。

errorformat で処理したい gfortran コンパイラのエラー メッセージの例をいくつか以下に示します。

手伝ってくれてどうもありがとう

エラー例(これまではerrorformatで対応)

folder/file.f90:22.19:

        ini=.false.
         1
Error: Symbol 'ini' at (1) has no IMPLICIT type

警告の例

folder/file.f90:485.12:

        use SomeMod, only: somevar
            1
Warning: Unused module variable 'somevar' which has been explicitly imported at (1)

リンカー エラーの例

 /tmp/ccPcF56y.o: In function `MAIN__':
test.f90:(.text+0x8e0): undefined reference to `init_'
../../_build/amod.o: In function `__amod_MOD_dostuff':
amod.f90:(.text+0x3e32): undefined reference to `dothis_'
amod.f90:(.text+0x3e74): undefined reference to `dothat_'
collect2: error: ld returned 1 exit status

複数のエラー箇所の例

file.f90:8.8:

    use AMod
        1
file.f90:231.25:

    call init()
         2
Error: 'init' at (1) has a type, which is not consistent with the CALL at (2)
4

2 に答える 2

2

これはある程度機能します

set efm=%A%f:%l.%c:,%C,%C\ %.%#,%ZError:\ %m,%ZWarning:\ %m,%f:(%.%#):%m
  • 複数行の部分 (%A-%Z) は、エラーと警告を対等に処理します
  • %C コードは、空の行と空白で始まる行をスキップすることです
  • リンクエラー形式では、欠落している関数が呼び出された行に移動しませんが、正しいファイルが開きます
  • vim errorformat で複数エラーのケースを処理する方法がわかりません。

これはvimで与えます

:clist
 1 folder/file.f90:22 col 19:  Symbol 'ini' at (1) has no IMPLICIT type
 2 folder/file.f90:485 col 12:  Unused module variable 'somevar' which has been explicitly imported at (1)
 4 test.f90: undefined reference to `init_'
 6 amod.f90: undefined reference to `dothis_'
 7 amod.f90: undefined reference to `dothat_'
于 2014-04-28T21:49:13.930 に答える
1

それは私がどこまで進んだか、それは一種の仕事ですが、本当にいいことではありません

set efm=%I%.%#In\ function%m,%I%.%#undefined\ reference\ to%m,%E%f:%l.%c:,%E%f:%l:,%C,%C%p%*[0123456789^],%ZError:\ %m,%ZWarning:\ %m,%C%.%#
于 2013-02-05T13:51:42.757 に答える