1

私の c++ プロジェクトは、それぞれが独自の makefile を持つ複数のディレクトリで構成されています。1 レベル上には、他のものを順番に呼び出す最上位の makefile もあります。

vim内から、最上位のmakefileまたはサブのmakefileを作成したいと考えています。ソースコード行にジャンプする行で ENTER を押して、vim 内でエラーを確認したい。

これは使用して動作します

make | copen

ただし、一度に 1 つのディレクトリのみです。エラー ウィンドウに表示されるファイル名は単なる名前であり、パスではありません。最上位のメイクファイルを作成しようとして、ファイル名/行番号で ENTER を押しても、ファイルへのパスがわかりません。

これを回避する方法はありますか?vim内から最上位のmakefileを構築したいと思います。エラーがどのディレクトリにあるかに関係なく、正しいファイルにジャンプします。問題は、g++ がパスではなくファイルの名前のみを出力することです。

4

3 に答える 3

2

にはその'errorformat'ためのメカニズムが組み込まれています。から:help errorformat:

一部のコンパイラは、%f によって読み取られる各ファイル名の先頭に追加する必要があるディレクトリ名で構成されるメッセージを生成します (例: GNU make)。次のコードを使用して、これらのディレクトリ名をスキャンできます。これらは内部ディレクトリ スタックに格納されます。 E379 %D "enter directory" フォーマット文字列; 次の %f は、ディレクトリ名 %X "leave directory" フォーマット文字列を検索します。次の %f が必要です

「ディレクトリに入る」または「ディレクトリから離れる」形式を定義する場合、その部分文字列の先頭に「%D」または「%X」を指定する必要があります。Vim はディレクトリの変更を追跡し、見つかった各エラー ファイルの先頭に現在のディレクトリを相対パスで追加します。|quickfix-directory-stack|を参照してください。詳細、ヒント、および制限事項については、

そのため、これらの「ディレクトリ変更」メッセージを出力する Makefile を取得し、'errorformat'設定によって正しく解析されるようにする必要があります。

于 2012-09-19T16:33:16.120 に答える
0

あなたはVimに実行するカスタムコマンドを与えることができます:make

:set makeprg=make\ -f\ /path/to/your/toplevel/makefile
于 2012-09-19T14:04:32.397 に答える
0

vimで次のマップを作成できます

!find .. -type d -exec make -C {} \;

何かのようなもの:

map  <F12>    <esc>:!find .. -type d -exec make -C {} \;<cr>

:clist にまだエラーが表示されるはずです。

上位レベルの make ファイルを実行したい場合は、次のようにすることができます。

:make -C .. | copen
于 2012-09-19T14:49:10.020 に答える