14
對於一個項目,我構建了一個C庫,並將蘊含Python綁定(通過GObject內省)與CMake綁定。我也想分發一些使用distutils的Python helper模塊。我能與此CMakeLists.txt
使用CMake和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()
及以下setup.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'])
遺憾的是,構建步驟在每個我跑make
時間執行。我猜,問題與自定義命令的輸出有關,它是一個目錄而不是文件。現在,有沒有辦法告訴CMake只有在setup.py.in
或其中一個來源發生變化時才運行python setup.py build
?
正是我在找的東西。謝謝。 – matthias