【发布时间】:2015-05-27 18:18:59
【问题描述】:
编辑:这个问题有点太长了。这是我真正的问题:如何在 CMake 中使用 setuptools (setup.py) 构建和安装 python 包?我的代码的详细信息如下所示(但使用源外构建方法,带有源的方法是有效的)。
我有一个项目需要分发我自己的 python 包。我制作了一个 setup.py 脚本,但我想用 CMake 构建和安装它。
我关注了Using CMake with setup.py,但它只适用于CMakeLists.txt 旁边的setup.py 和python 文件夹,并且没有从构建目录执行cmake。
使用这种布局:
Project/
--build/
--lib/
----python/
------folder1/
------folder2/
------data/
------...
------__init__.py
----setup.py
----CMakeLists.txt
--CMakeLists.txt
和CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
add_subdirectory(lib)
(..)
和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()
和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")
当我从构建目录运行CMake,然后运行make 时,目标已构建,但没有任何内容。就好像没有找到包裹一样。安装安装没有.py文件的python包。
【问题讨论】:
-
你试过在 add_custom_command 中设置 WORKING_DIRECTORY 吗?
-
您应该使用相对于当前源目录的所有路径。放置一行,例如
DIR = os.path.dirname(os.path.realpath(__file__)),然后使所有包都与该目录相关,以便从源代码构建。
标签: python build cmake package setup.py