【问题标题】:Cmake compiling python into build folderCmake将python编译到构建文件夹中
【发布时间】:2012-09-04 23:56:37
【问题描述】:

我认为一个例子是展示我的问题的最佳方式:

假设我有一个名为 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,但我的语法必须在某处关闭。任何帮助将不胜感激!

【问题讨论】:

    标签: python compilation cmake


    【解决方案1】:

    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 documentation

    【讨论】:

    • 我实际上几乎得到了另一种工作方式.. ADD_CUSTOM_TARGET(output ALL /usr/bin/python -m /src/py_compile blah.py COMMAND /bin/mv /src/blah.py /build唯一的事情是我宁愿把这一切都放在一个命令中。有没有我可以指定 py_compile 让它将编译后的文件放在构建目录中的选项。我只是不确定我的 src 目录是否有写特权。
    • 您可以在add_custom_target 调用${CMAKE_CURRENT_BINARY_DIR} 中设置WORKING_DIRECTORY 参数,python 将在那里输出它的文件。其他方式 - 将 /src/py_compile 替换为 ${CMAKE_CURRENT_BINARY_DIR/py_compile`。
    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多