用于 Win32 平台的 CMake find_package(PythonInterp 3.7 REQUIRED)

Posted

技术标签:

【中文标题】用于 Win32 平台的 CMake find_package(PythonInterp 3.7 REQUIRED)【英文标题】:CMake find_package(PythonInterp 3.7 REQUIRED) for Win32 platform 【发布时间】:2019-03-07 14:44:08 【问题描述】:

我有一些项目应该支持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 才能覆盖这两个平台?

【问题讨论】:

【参考方案1】:

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

【讨论】:

应该是 COMPONENTS - 在 CMake 命令选项中区分大小写

以上是关于用于 Win32 平台的 CMake find_package(PythonInterp 3.7 REQUIRED)的主要内容,如果未能解决你的问题,请参考以下文章

如何安装Cmake3.11.3-win32-x86

CMake 为 Win32 和 x64 生成 Visual Studio 2008 解决方案

win10+OpenCV3.4.9+Cmake3.17.0源码安装

使用Visual Studio + CMake 构建Qt程序弹出Console控制台

GNU开发工具——CMake模块

vscode cmake gcc wx win32 gui application or console