CMake mit setup.py verwenden
Für ein Projekt baue ich eine C-Bibliothek und impliziere Python-Bindungen (über GObject Introspection) mit CMake. Ich möchte auch einige Python-Hilfsmodule mithilfe von distutils verteilen. Ich kann das Modul damit bauen und installierenCMakeLists.txt
find_program(PYTHON "python")
if (PYTHON)
set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in")
set(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
set(DEPS "${CMAKE_CURRENT_SOURCE_DIR}/module/__init__.py")
set(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/build")
configure_file(${SETUP_PY_IN} ${SETUP_PY})
add_custom_command(OUTPUT ${OUTPUT}
COMMAND ${PYTHON}
ARGS setup.py build
DEPENDS ${DEPS})
add_custom_target(target ALL DEPENDS ${OUTPUT})
install(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)")
endif()
und die folgendesetup.py.in
:
from distutils.core import setup, Extension
if __name__ == '__main__':
setup(name='foo',
version='${PACKAGE_VERSION}',
package_dir={ '': '${CMAKE_CURRENT_SOURCE_DIR}' },
packages=['module'])
Leider wird der Build-Schritt bei jeder Ausführung ausgeführtmake
. Ich denke, das Problem hängt mit der Ausgabe des benutzerdefinierten Befehls zusammen, bei dem es sich nicht um eine Datei, sondern um ein Verzeichnis handelt. Gibt es eine Möglichkeit, CMake zu veranlassen, ausgeführt zu werden?python setup.py build
nur wennsetup.py.in
oder eine der quellen geändert?