Für ein Projekt baue ich eine C-Bibliothek und impliziert Python-Bindungen (über GObject Introspection) mit CMake. Ich möchte auch einige Python-Helper-Module mit Hilfe von Distutils verteilen. Ich bin in der Lage das Modul mit diesem CMakeLists.txt
Verwenden von CMake mit setup.py
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 der folgenden setup.py.in
zu bauen und zu installieren:
from distutils.core import setup, Extension
if __name__ == '__main__':
setup(name='foo',
version='${PACKAGE_VERSION}',
package_dir={ '': '${CMAKE_CURRENT_SOURCE_DIR}' },
packages=['module'])
Leider Schritt ausgeführt wird jedes Mal, wenn ich make
laufen, die zu bauen. Ich denke, das Problem hängt mit der Ausgabe des benutzerdefinierten Befehls zusammen, bei dem es sich um ein Verzeichnis und nicht um eine Datei handelt. Gibt es nun eine Möglichkeit, CMake zu veranlassen, python setup.py build
nur auszuführen, wenn setup.py.in
oder eine der Quellen geändert wurde?
Genau das, was ich gesucht habe. Vielen Dank. – matthias