Mam projektu Coq z jego bibliotek organizowanych do podkatalogów, coś jak:Coq: zarządzanie LoadPath w projekcie z podkatalogów
…/MyProj/Auxiliary/Aux.v
…/MyProj/Main/Main.v (imports Auxiliary/Aux.v)
Kiedy skompilować pliki, spodziewam się, aby to zrobić z katalogu roboczego MyProj
(przez plik Makefile). Ale chcę także pracować nad plikami przy użyciu Proof General/Coqtop, w którym to przypadku katalog roboczy jest domyślnie katalogiem, w którym plik się znajduje.
Ale to oznacza, że ścieżka ładowania różni się między tymi dwoma kontekstami, więc logiczna ścieżka potrzebna do importu biblioteki jest inna. Jak skonfigurować wywołanie coqc, ścieżkę LoadPath i deklaracje importu, aby działały w obu kontekstach?
Każde podejście, które próbowałem, coś poszło nie tak. Na przykład, jeśli mogę skompilować Aux.v
powołując
coqc -R "." "MyProj" Auxiliary/Aux.v
i zaimportować go w Main.v
jak
Require Import MyProj.Auxiliary.Aux.
wtedy działa, kiedy skompilować Main.v
z
coqc -R "." "MyProj" Main/Main.v
ale nie w Coqtop, z Error: Cannot find library MyProj.Auxiliary.Aux in loadpath
. Z drugiej strony, jeśli przed Require Import
dodam
Add LoadPath ".." as MyProj.
wtedy działa w Coqtop, ale nie pod coqc -R "." "MyProj" Main/Main.v
z
Error: The file […]/MyProj/Auxiliary/Aux.vo contains library
MyProj.Auxiliary.Aux i MyProj.MyProj.Auxiliary nie biblioteka .Aux
Szukam rozwiązania odpornego na bibliotekę, która jest udostępniana współpracownikom (i miejmy nadzieję, że ostatecznie z użytkownikami), więc w szczególności nie może korzystać z bezwzględnych ścieżek plików. Najlepszym znalazłem teraz jest dodanie Emacs zmiennych lokalnych ustawić LoadPath się, gdy przywołuje Dowód Ogólne Coqtop:
((coq-mode . ((coq-prog-args . ("-R" ".." "MyProj" "-emacs")))))
ale to (a) wydaje się nieco hacky, oraz (b) działa tylko na dowód generalnego , nie w Coqide lub zwykłym Coqtop. Czy istnieje lepsze rozwiązanie?