2016-05-21 4 views
1

Je travaille sur un projet de transition scons à autotools, puisque je il semble générer automatiquement un grand nombre de fonctionnalités qui sont ennuyeux d'écrire dans un SConscript (par exemple make uninstall).Y at-il des inconvénients à utiliser un Makefile.am sur setup.py?

Le projet est la plupart du temps C++ base, mais comprend aussi des modules qui ont été écrits en Python. Après beaucoup de lecture des autotools, je peux enfin créer une bibliothèque partagée, compiler et lier un exécutable par rapport à elle, et installer des fichiers d'en-tête C++. Charmant. Maintenant vient la partie python. En incluant AM_PYTHON_PATH dans configure.ac, j'installe également les modules Python avec des fichiers Makefile.am tels que

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

Cela semble placer tous mes modules et scripts dans les emplacements appropriés, mais je me demande si c'est "correct", parce que la façon d'installer les modules python semble être à travers un script setup.py via distutils. J'ai des scripts setup.py dans les modules python et scons les invoquait jusqu'à ce que je marche avec autotools. Une méthode est-elle préférée à l'autre? Dois-je encore utiliser setup.py lorsque je construis avec autotools? Je voudrais comprendre comment les gens disparaissent généralement construit avec C++ et modules Python en utilisant les autotools. J'ai beaucoup d'autres questions Autotools, mais je vais les sauvegarder pour plus tard.

+0

Autotools est tout simplement terrible. Je ne peux même pas commencer à ... Voici un exemple lu: http://voices.canonical.com/jussi.pakkanen/2011/09/13/autotools/ – Zulan

+0

Hah. Oui, j'ai déjà lu celui-là. J'ai lu beaucoup d'opinions la semaine dernière. Jusqu'à présent, je ne déteste pas autotools (au moins après les premiers jours de traction des cheveux), je déteste notre mise en œuvre actuelle de scons. – jonthalpy

+0

Avez-vous envisagé d'utiliser cmake? Je ne dis pas cela pour être contraire, il y a des choses que je n'aime honnêtement pas à propos de cmake aussi. Mais d'après mon expérience, cmake est beaucoup moins douloureux que les autotools, il fonctionne principalement et il n'est pas trop difficile de trouver des informations utiles si vous avez des problèmes. Je ne peux certainement pas le dire pour autotools. –

Répondre

2

D'après votre description, je suggère que vous avez votre projet construit en utilisant actions autotools-générés configure et Makefile, à savoir autoconf et automake, et ont soit votre configure ou votre prendre soin Makefile d'exécuter votre setup.py, afin de Configurez vos bits Python.

J'ai un projet qui est surtout le code C/C++, avec un module Perl. C'est très similaire à ce que vous essayez de faire, sauf que c'est Perl au lieu de Python.

Dans mon Makefile (générée à partir de Makefile.am) Je une cible qui exécute le Makefile.PL du module Perl, qui est analogue à Python setup.py, et de cette manière je construire le module Perl conjointement avec le reste du code C++, en parfaite harmonie , en une seule construction. Fonctionne assez bien.

automake'sMakefile.am est très ouvert et flexible, et peut être facilement adapté et étendu pour incorporer des bits étrangers, comme ceux-ci.

+0

OK, merci! Gardez donc setup.py, et faites-le exécuter via make. Si vous pouviez expliquer comment vous faites cela, ce serait génial. Souhaitez-vous créer un hook d'installation dans un fichier Makefile.am qui réside dans les répertoires du module python? – jonthalpy

+1

Je suppose que "setup.py" n'installe pas réellement quelque chose dans $ (DESTDIR), mais qu'il est analogue à autotools configure script; et des commandes supplémentaires doivent être exécutées pour installer les modules python dans $ (DESTDIR). Dans ce cas, j'utiliserais quelque chose comme "BUILD_SOURCES = python.setup.done" et une règle pour construire "python.setup.done" comme quelque chose comme "python $ (srcdir) /setup.py; touchez python.setup.done ", puis avoir un crochet d'installation faire tout ce qui doit être fait pour installer les fichiers dans $ (DESTDIR). –