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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage