2012-05-23 12 views
5

Kiedy używam M-x compile do kompilacji równoległej z make -jn dla projektu z wieloma poziomami, kiedy dostaję błąd, nie mogę dostać się do właściwego miejsca z rzeczami next-error. Emacs zawsze przechodzi do niewłaściwego katalogu dla problematycznego pliku. Ale nie mam problemu, jeśli po prostu to zrobię bez -jn.Obsługuj poprawnie błąd kompilacji równoległej w trybie kompilacji emacs

+0

Czy możesz podać minimalny przykład? –

Odpowiedz

0

next-error wykorzystuje wyjście tekstowe Twojej kompilacji, aby ustalić, gdzie ma się udać. Ale przy równoległej kompilacji, ten tekst może być uszkodzony, a nawet jeśli nie jest uszkodzony, może i często jest niejednoznaczny (pomyśl o jednym zadaniu kompilując foo/bar i innym zadaniu kompilując toto/titi i wyjściu wyglądającym jak "wprowadzanie katalog foo; wpisanie katalogu toto; błąd na pasku: 20; błąd w titi: 69 ").

mogę myśleć tylko o następujących sposobów rozwiązania tego problemu:

  • struktura plików make tak, że nigdy nie zmieni katalogu (tak wszystkie nazwy plików są w stosunku do tego samego katalogu bieżącego).
  • zmienić pliki make tak, aby przekazywały bezwzględne nazwy plików do kompilatora, więc wszystkie nazwy plików w komunikatach o błędach są bezwzględne.
  • włamać się do compile.el Emacsa, aby podczas wyszukiwania "paska" pobrać go we wszystkich wymienionych wcześniej katalogach.

Ta ostatnia zmiana prawdopodobnie byłaby dobra (tj. Powitanie łatki), ale należy pamiętać, że nadal występowałaby problem, jeśli "pasek" istnieje zarówno w "foo", jak i "toto". Pozostałe dwie zmiany również mogą napotkać problemy, ponieważ dane wyjściowe mogą również wyglądać tak: "Wprowadzanie katalogu do katalogu toto; o;"; i nie wiem, co można zrobić, aby uniknąć tego problemu.