Sam*_*din 11 python build cmake package setup.py
编辑:问题有点太长了.这是我真正的问题:如何在CMake中使用setuptools(setup.py)构建和安装python包?我的代码的细节如下所示(但是使用源代码构建方法,源代码的方法正在运行).
我有一个项目,我需要分发自己的python包.我制作了一个setup.py脚本,但我想用CMake构建和安装它.
我跟着使用CMake和setup.py但它只能在setup.py和python文件夹旁边使用一个CMakeLists.txt,而不从构建目录执行cmake.
有了这个布局:
Project/
--build/
--lib/
----python/
------folder1/
------folder2/
------data/
------...
------__init__.py
----setup.py
----CMakeLists.txt
--CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
并使用CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
add_subdirectory(lib)
(..)
Run Code Online (Sandbox Code Playgroud)
和lib/CMakeLists.txt:
find_program(PYTHON "python")
if (PYTHON)
set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py")
set(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
set(DEPS "${CMAKE_CURRENT_SOURCE_DIR}/python/__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()
Run Code Online (Sandbox Code Playgroud)
和setup.py
from setuptools import setup, find_packages
setup(name="python",
version="xx",
author="xx",
packages = find_packages(),
package_data = {'': ['*.txt']},
description="Python lib for xx")
Run Code Online (Sandbox Code Playgroud)
当我从构建目录运行CMake然后make时,目标是构建但没有任何东西.好像没有找到包裹.安装安装没有.py文件的python包...
谢谢
setuptools 不知道源代码外构建,因此找不到任何 python 源文件(因为您没有将它们复制到二进制目录,只有该setup.py
文件似乎存在于那里)。为了解决这个问题,您必须将 python 源代码树复制到CMAKE_CURRENT_BINARY_DIR
.