2016-05-21 5 views
1

Я работаю над переходом проекта с scons на autotools, так как я, кажется, автоматически генерирует много функций, которые раздражают писать в SConscript (например, make uninstall).Есть ли недостатки в использовании Makefile.am над setup.py?

Проект в основном основан на C++, но также включает в себя некоторые модули, написанные на python. После многого чтения autotools я могу, наконец, создать общую библиотеку, скомпилировать и связать с ней исполняемый файл и установить файлы заголовков C++. Прекрасный. Теперь наступает их часть python. Включив AM_PYTHON_PATH в configure.ac, я также устанавливать питон модули с Makefile.am файлов, таких как

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

Это, кажется, чтобы поместить все мои модули и скрипты в соответствующих местах, но мне интересно, правильно ли это, потому что способ установки модулей python, по-видимому, осуществляется через скрипт setup.py через distutils. У меня есть setup.py скрипты внутри модулей python, и scons вызывал их, пока я не пошел с помощью autotools. Один метод предпочтительнее другого? Должен ли я все еще использовать setup.py при создании с помощью autotools? Я хотел бы понять, как люди обычно разрешают сборки с помощью C++ и модулей python с использованием autotools. У меня есть много других вопросов по автотесту, но я сохраню их позже.

+0

Autotools просто ужасно. Я даже не могу начать ... Вот пример: http://voices.canonical.com/jussi.pakkanen/2011/09/13/autotools/ – Zulan

+0

Hah. Да, я уже это читал. На прошлой неделе я много читал. Пока я не ненавижу autotools хотя (по крайней мере, после первых нескольких дней вытягивания волос), я ненавижу нашу нынешнюю реализацию scons. – jonthalpy

+0

Считаете ли вы использование cmake? Я не говорю, что это противоречит, есть вещи, которые я, честно говоря, тоже не люблю о cmake. Но по моему опыту cmake намного менее болезненен, чем autotools, он в основном просто работает, и не сложно найти полезную информацию, если у вас есть проблемы. Я определенно не могу сказать это для autotools. –

ответ

2

На основании вашего описания, я предположил бы, что у Вас есть свой проект построен с использованием фондовых Autotools сгенерированных configure и Makefile, т.е. autoconf и automake, и или ваш configure или ваш Makefile заботиться о выполнении вашего setup.py для того, чтобы настройте свои биты Python.

У меня есть проект, в основном код C/C++, вместе с модулем Perl. Это очень похоже на то, что вы пытаетесь сделать, за исключением того, что это Perl вместо Python.

В моей Makefile (генерируется из Makefile.am) У меня есть цель, которую выполняет модуль в Perl Makefile.PL, который является аналогом Питона setup.py, и именно таким образом я создаю модуль Perl вместе с остальной частью кода C++, легко вместе , как единую сборку. Хорошо работает.

automake'sMakefile.am является очень открытым и гибким и может быть легко адаптирован и расширен для включения иностранных бит, как эти.

+0

Хорошо, спасибо! Поэтому держите setup.py и выполняйте его с помощью make. Если бы вы могли уточнить, как вы это сделаете, это будет здорово. Вы создали бы установочный крючок в Makefile.am, который живет в каталогах модулей python? – jonthalpy

+1

Я предполагаю, что «setup.py» фактически ничего не устанавливает в $ (DESTDIR), но что он аналогичен скрипту configure autotools; и необходимо выполнить дополнительные команды, чтобы установить модули python в $ (DESTDIR). В этом случае я бы использовал нечто вроде «BUILD_SOURCES = python.setup.done» и правило для создания «python.setup.done» как нечто вроде «python $ (srcdir) /setup.py; touch python.setup.done », тогда установите установочный крючок, что нужно сделать, чтобы установить файлы в $ (DESTDIR). –