Pracuję nad przeniesieniem projektu z scons do autotools, ponieważ wydaje mi się, że automatycznie generuję wiele funkcji, które są irytujące do napisania w SCONScript (np. make uninstall
).
Projekt opiera się głównie na C ++, ale takżezawiera niektóre moduły napisane w pythonie. Po wielu autotoolach odczytu mogę w końcu utworzyć wspólną bibliotekę, skompilować i połączyć plik wykonywalny z nią i zainstalować pliki nagłówkowe c ++. Śliczny. Teraz przychodzi ich część pytona. Przez włączenie AM_PYTHON_PATH w configure.ac, ja także instaluję moduły pythona z plikami Makefile.am takimi jak
autopy_PYTHON=autopy/__init__.py autopy/noindent.py autopy/auto.py
submoda_PYTHON=autopy/submoda/moda.py autopy/submoda/modb.py autopy/submoda/modc.py autopy/submoda/__init__.py
submodb_PYTHON=autopy/submodb/moda.py autopy/submodb/modb.py autopy/submodb/modc.py autopy/submodb/__init__.py
autopydir=$(pythondir)/autopy
submodadir=$(pythondir)/submoda
submodbdir=$(pythondir)/submodb
dist_bin_SCRIPTS=scripts/script1 scripts/script2 scripts/script3
Wydaje się, że umieszczam wszystkie moje moduły i skryptyodpowiednie lokalizacje, ale zastanawiam się, czy jest to "poprawne", ponieważ sposób instalacji modułów Pythona wydaje się być przez skrypt setup.py przez distutils. Mam skrypty setup.py wewnątrz modułów Pythona, a scons wywoływał je, dopóki nie wkroczyłem z autotoolami. Czy jedna metoda jest lepsza od drugiej? Czy nadal powinienem używać programu setup.py podczas kompilacji z autotoolami? Chciałbym zrozumieć, jak ludzie zazwyczaj rozwiązują kompilacje za pomocą c ++ i moduły pythonowe wykorzystujące autotools. Mam mnóstwo innych pytań związanych z autotoolami, ale uratuję je na później.
Odpowiedzi:
2 dla odpowiedzi № 1Opierając się na twoim opisie, sugerowałbym, żeby twój projekt został zbudowany przy użyciu generowanych autotoolów configure
i Makefile
, tj. autoconf
i automake
i masz albo swoje configure
lub Twój Makefile
zajmij się wykonywaniem setup.py
, aby ustawić bity Pythona.
Mam projekt, który jest głównie kod C / C ++, wraz z modułem Perl.To jest bardzo podobne do tego, co próbujesz zrobić, z wyjątkiem tego, że jest to Perl zamiast Python.
W moim Makefile
(wygenerowano z Makefile.am
) Mam cel, który wykonuje moduły Perla Makefile.PL
, co jest analogiczne do Pythona setup.py
iw ten sposób buduję moduł Perla razem z resztą kodu C ++, płynnie razem, jako pojedynczy build. Działa całkiem dobrze.
automake"s
Makefile.am
jest bardzo otwarty i elastyczny, i można go łatwo dostosować i rozszerzyć, aby zawierał obce bity, takie jak te.