2013-08-21 29 views
15

Tôi có một dự án boost.python mà tôi biên dịch bằng cmake và tạo. Nó là một phần của một mô-đun python, và tôi muốn có thể cài đặt mô-đun đó bằng cách sử dụng các phân đoạn. Tôi đã làm theo hướng dẫn here để tạo tệp CMakeLists.txt trước tiên biên dịch thư viện được chia sẻ, sau đó thiết lập setup.py để cài đặt bằng cài đặt mô-đun python. Tuy nhiên, trong khi tất cả các tệp python được nhận dạng bởi các dấu ngắt và được chuyển đến thư mục xây dựng, thư viện được chia sẻ không phải là, và tôi thực sự không biết tại sao.python/C++ - Biên soạn thư viện chia sẻ với cmake và cài đặt với các đường biên

My cấu trúc thư mục dự án:

  • dự án
    • xây dựng (distutils python thư mục)
    • doc (tài liệu mô-đun)
    • mô-đun (chính thư mục module)
      • lõi (dir cho dự án/thư viện tăng cường
        • CMakeLists.txt - xây dựng thư viện chia sẻ
      • other_py_files (vài thư mục của file python tinh khiết)
    • CMakeLists.txt
    • setup.py.in
    • setup.py (tạo ra bởi cmake)

tập tin setup.py.in của tôi:

from distutils.core import setup 
setup(
    name='module', 
    version='${PACKAGE_VERSION}', 
    packages=['module', 'module.core', 'module.other_py_files'], 
    package_dir={'': '${CMAKE_CURRENT_SOURCE_DIR}'}, 
) 

My CMakeLists.txt:

cmake_minimum_required (VERSION 2.6) 
project (module) 

add_subdirectory(module/core) 

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}/pyQCD/__init__.py") 
    set(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/build/timestamp") 

    configure_file(${SETUP_PY_IN} ${SETUP_PY}) 

    add_custom_command(OUTPUT ${OUTPUT} 
    COMMAND ${PYTHON} ${SETUP_PY} build 
    COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT} 
    DEPENDS ${DEPS}) 

    add_custom_target(target ALL DEPENDS ${OUTPUT}) 

    install(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)") 

endif() 

Tôi nghĩ distutils được cho là để thêm phần mở rộng thư viện chia sẻ tự động để xây dựng thư mục, hoặc tôi đã có mà sai ở đâu đó? (Thư viện được chia sẻ là một mô-đun python có thể nhập được xây dựng trên C api (boost.python), vì vậy nó phải hoạt động đúng không?)

+0

Đây là liên kết đến mô-đun C/Python sử dụng CMake - https://gitlab.com/ideasman42/blender-mathutils - distutils chỉ được sử dụng để trích xuất tiền tố Python. * (mặc dù cũng có một setup.py, nó không được sử dụng cho việc xây dựng CMake) * – ideasman42

Trả lời

9

Cuối cùng tôi đã làm theo câu trả lời here và override lệnh build_ext. Như tôi muốn xây dựng là nền tảng chéo và vì thư viện chia sẻ nằm bên trong cây nguồn mô-đun, tôi nhập thư viện được chia sẻ mô-đun thêm sử dụng thuộc tính tệp để nhận đường dẫn đến thư viện được chia sẻ từ setup.py.

0

scikit-build là cách triển khai tùy chỉnh setup thay thế distutils.core.Extension và sử dụng cmake để biên dịch nguồn. Một loạt các dự án mẫu có thể được tìm thấy here. Trong trường hợp bạn đang sử dụng Pybind11, có một ví dụ đơn giản khác về cách sử dụng here.

Các vấn đề liên quan