python - 用于 Win32 平台的 CMake find_package(需要 PythonInterp 3.7)

标签 python c++ cmake

我有一些项目应该支持 Win32x64 平台。 一些代码是由 python 脚本生成的。 此脚本使用 python3 功能。

CMakeLists.txt 我有这样的东西:

find_package(PythonInterp REQUIRED)
if (CMAKE_CL_64)
    set(MY_APP_PLATFORM "x64")
else()
    set(MY_APP_PLATFORM "Win32")
endif()

add_custom_command(TARGET MyApp
    PRE_BUILD
    COMMAND ${PYTHON_EXECUTABLE} ${MyApp_ROOT}/generator.py -p ${MY_APP_PLATFORM }
    WORKING_DIRECTORY ${PATH_GENERATED_SRC}
    COMMENT "Generating code..."
    VERBATIM
)

非常简单。

现在,当使用 x64 的项目时,一切都很好,但是当为 Win32 构建时(cmake 必须生成单独的项目)cmake 找到 python 2.7.2

以这种方式更改 CMakeLists.txt:

find_package(PythonInterp 3.7 REQUIRED)

导致cmake失败。

有没有办法修复它,还是我必须更正 pythons 脚本以使其与 python2 兼容?

或者我是否必须为 32 位和 64 位安装 python3 以涵盖这两个平台?

最佳答案

CMake 模块是您的 cmake 发行版中的 FindPython3.cmake

这应该有效:

find_package(Python3 COMPONENTS Interpreter)

add_custom_command(TARGET MyApp
    PRE_BUILD
    COMMAND ${PYTHON3_EXECUTABLE} ${MyApp_ROOT}/generator.py -p ${MY_APP_PLATFORM}
    WORKING_DIRECTORY ${PATH_GENERATED_SRC}
    COMMENT "Generating code..."
    VERBATIM
)

它从 cmake 3.12 开始可用。

Documentation

关于python - 用于 Win32 平台的 CMake find_package(需要 PythonInterp 3.7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55046499/

相关文章:

c++ - 初始化 union

从 brew 使用 LLVM 5.0.0 时出现 Cmake 错误

python - SqlAlchemy - 什么时候应该创建新 session ?

python - 谷歌应用引擎导入错误 : dynamic module does not define init function (init_mysql)

python - 为什么我得到的是 sqlalchemy.exc.ProgrammingError 而不是 sqlalchemy.exc.IntegrityError?

python - 如何提取 pandas 数据框中而不是子集数据框中的行

c++ - 是否存在比较不比较完整对象状态的常规类型的概念名称?

c++11返回值优化还是搬家?

c++ - 如何在VS 2019或CLion Project中使用 "webrtc.lib"静态库?

cmake - KDE 安装目录