Đối với một dự án, tôi xây dựng một thư viện C và ngụ ý ràng buộc Python (thông qua tính từ nội tại GObject) với CMake. Tôi cũng muốn phân phối một số mô-đun trợ giúp Python bằng cách sử dụng các dấu rãnh. Tôi có thể xây dựng và cài đặt module với điều này CMakeLists.txt
Sử dụng CMake với 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()
và setup.py.in
sau:
from distutils.core import setup, Extension
if __name__ == '__main__':
setup(name='foo',
version='${PACKAGE_VERSION}',
package_dir={ '': '${CMAKE_CURRENT_SOURCE_DIR}' },
packages=['module'])
Thật không may, bước xây dựng được thực hiện mỗi khi tôi chạy make
. Tôi đoán, vấn đề là liên quan đến đầu ra của lệnh tùy chỉnh mà là một thư mục chứ không phải là một tập tin. Bây giờ, có cách nào để yêu cầu CMake chạy python setup.py build
chỉ khi setup.py.in
hoặc một trong các nguồn thay đổi không?
Chính xác những gì tôi đang tìm kiếm. Cảm ơn. – matthias