3

我认为一个例子将是证明我的问题的最佳方式:

假设我有一个名为 src 的源目录。该目录有两个文件,一个 CMakeLists.txt 文件和一个名为 blah 的 python 文件。在存储 src 的同一个地方,有一个名为 build 的文件夹。现在,我希望能够运行 cmake 并使其编译我的 python 文件 blah 并将其放入我的构建目录中。目前,我的 CMakeLists.txt 只是使用调用将未编译的代码直接复制到我的构建目录中:

CONFIGURE_FILE(${PATH_TO_SOURCE}/blah.py ${PATH_TO_BUILD}/blah.py COPYONLY)

然后我在终端中运行 make 来编译实际文件。这会将未编译的 python 文件留在我的构建目录中,这不好。我尝试过使用 ADD_EXECUTABLES,创建自定义目标并使用 COMMAND,但我的语法必须在某处关闭。任何帮助将不胜感激!

4

1 回答 1

4

CMake 不支持开箱即用的 Python,AFAIK。因此,您需要编写规则来构建 python 文件,如下所示:

macro(add_python_target tgt)
  foreach(file ${ARGN})
    set(OUT ${CMAKE_CURRENT_BINARY_DIR}/${file}.pyo)
    list(APPEND OUT_FILES ${OUT})
    add_custom_command(OUTPUT ${OUT}
        COMMAND <python command you use to byte-compile .py file>)
  endforeach()

  add_custom_target(${tgt} ALL DEPENDS ${OUT_FILES})
endmacro()

定义好之后就可以这样使用了:

add_python_target(blabla blah.py)

如果您想进行调整或需要更多信息,请参阅CMake 文档

于 2012-09-05T09:44:33.527 回答