mat*_*ias 16 distutils cmake setup.py
对于一个项目,我构建了一个C库,并使用CMake隐藏了Python绑定(通过GObject内省).我还想使用distutils分发一些Python辅助模块.我可以用这个来构建和安装模块CMakeLists.txt
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()
Run Code Online (Sandbox Code Playgroud)
以下内容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'])
Run Code Online (Sandbox Code Playgroud)
不幸的是,每次运行时都会执行构建步骤make
.我猜,问题与自定义命令的输出有关,该命令是目录而不是文件.现在,有没有办法告诉CMake python setup.py build
只在setup.py.in
其中一个来源发生变化时运行?
只有文件而不是目录才能可靠地用作OUTPUT和DEPENDS.您可以修改自定义命令以生成时间戳文件,如下所示:
add_custom_command(
OUTPUT ${OUTPUT}/timestamp
COMMAND ${PYTHON} setup.py build
COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT}/timestamp
DEPENDS ${DEPS}
)
add_custom_target(target ALL DEPENDS ${OUTPUT}/timestamp)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5625 次 |
最近记录: |