用于 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 【问题描述】:我有一些项目应该支持Win32
和x64
平台。
一些代码是由 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)的主要内容,如果未能解决你的问题,请参考以下文章
CMake 为 Win32 和 x64 生成 Visual Studio 2008 解决方案
win10+OpenCV3.4.9+Cmake3.17.0源码安装