Предположим, что у вас есть проект с каталогом с именем src
, поэтому давайте выполните следующие шаги, чтобы получить расширение Python, собранное и упакованное с помощью autotools:
Создание файлов Makefile.am
Во-первых, вам нужно создать один Makefile.am в корне вашего проекта, в основном (но не исключительно), перечисляя подкаталоги, которые также должны быть обработаны. Вы получите что-то вроде этого:
SUBDIRS = src
Второй, внутри каталога src
, будет содержать инструкции для фактической компиляции вашего расширения Python. Это будет выглядеть так:
myextdir = $(pkgpythondir)
myext_PYTHON = file1.py file2.py
pyexec_LTLIBRARIES = _myext.la
_myext_la_SOURCES = myext.cpp
_myext_la_CPPFLAGS = $(PYTHON_CFLAGS)
_myext_la_LDFLAGS = -module -avoid-version -export-symbols-regex initmyext
_myext_la_LIBADD = $(top_builddir)/lib/libhollow.la
EXTRA_DIST = myext.h
Напишите файл configure.ac
Этот файл должен быть создан в корневом каталоге проекта и должен содержать список всех библиотек, программ или любых инструментов, которые необходимо построить в вашем проекте, таких как компилятор, компоновщик, библиотеки и т. Д.
Ленивые люди, как и я, обычно не создают его с нуля, я предпочитаю использовать инструмент autoscan
, который ищет вещи, которые вы используете, и генерирует файл configure.scan
, который можно использовать в качестве основы для вашего реального configure.ac
.
Чтобы сообщить automake
, что вам понадобится Python, вы можете добавить это к своему configure.ac
:
dnl python checks (you can change the required python version bellow)
AM_PATH_PYTHON(2.7.0)
PY_PREFIX=`$PYTHON -c 'import sys ; print sys.prefix'`
PYTHON_LIBS="-lpython$PYTHON_VERSION"
PYTHON_CFLAGS="-I$PY_PREFIX/include/python$PYTHON_VERSION"
AC_SUBST([PYTHON_LIBS])
AC_SUBST([PYTHON_CFLAGS])
Завершение
По сути, automake
имеет встроенное расширение, которое знает, как работать с Python, вам просто нужно добавить его в файл configure.ac
, а затем воспользоваться этой функцией в вашем Makefile.am
.
PyGtk, безусловно, потрясающий пример, но он довольно большой, поэтому, возможно, вы захотите проверить другой проект, например Guake