Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将CMake与setup.py一起使用_Cmake_Distutils_Setup.py - Fatal编程技术网

将CMake与setup.py一起使用

将CMake与setup.py一起使用,cmake,distutils,setup.py,Cmake,Distutils,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_D

对于一个项目,我构建了一个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()
以及中的以下
setup.py.:

来自distutils.core导入设置,扩展
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
安装程序(name='foo',
版本=“${PACKAGE_version}”,
package_dir={'':'${CMAKE_CURRENT_SOURCE_dir}},
软件包=['module'])

不幸的是,每次运行
make
时都会执行构建步骤。我想,问题与自定义命令的输出有关,它是一个目录而不是一个文件。现在,有没有办法告诉CMake只有在
setup.py.in
或其中一个源发生更改时才运行
python setup.py build
。您可以修改自定义命令以生成时间戳文件,如下所示:

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)

正是我想要的。谢谢