如何强制CMake使用指定路径的Python可执行文件与库?
问题解答
1. CMake为何能找到不在Path中的Python 3.8?
CMake查找Python的逻辑(Windows平台下)不局限于系统Path,主要依赖两个途径:
- 注册表查询:Windows环境中Python默认安装时会向系统注册表写入安装路径信息,CMake的
FindPythonInterp/FindPythonLibsNew模块会直接读取注册表中的Python条目,因此即使Path未配置,也能找到已注册的Python版本。 - CMake缓存:如果之前运行过CMake并生成了
CMakeCache.txt,文件中会缓存之前找到的Python路径,后续CMake执行会优先使用缓存值,而非重新执行查找流程。
2. 如何强制CMake使用指定路径的Python 3.6?
可以通过以下几种方式实现:
- 命令行参数指定:运行CMake时直接通过
-D参数指定Python可执行文件路径,CMake会自动关联对应版本的库和头文件:
若需要更精准控制,可同时指定头文件和库路径:cmake .. -DPYTHON_EXECUTABLE=C:/PYTHON_VERSIONS/STANDARD_3.6.8/python.execmake .. -DPYTHON_EXECUTABLE=C:/PYTHON_VERSIONS/STANDARD_3.6.8/python.exe ^ -DPYTHON_INCLUDE_DIR=C:/PYTHON_VERSIONS/STANDARD_3.6.8/include ^ -DPYTHON_LIBRARY=C:/PYTHON_VERSIONS/STANDARD_3.6.8/libs/python36.lib - 清理CMake缓存:删除构建目录下的
CMakeCache.txt文件,避免旧缓存值干扰新的查找流程,之后再重新运行带参数的CMake命令。 - 环境变量指定:设置
PYTHON_EXECUTABLE环境变量为Python 3.6的可执行文件路径,再启动CMake:set PYTHON_EXECUTABLE=C:\PYTHON_VERSIONS\STANDARD_3.6.8\python.exe cmake ..
3. 是否存在类似CMAKE_SET_PYTHON_PATH的配置项?
CMake没有名为CMAKE_SET_PYTHON_PATH的内置变量,但可以通过PYTHON_EXECUTABLE(针对旧版FindPythonLibsNew模块)或Python_EXECUTABLE(针对CMake 3.12+的新FindPython模块)变量强制指定Python路径,这是控制CMake使用特定Python版本的标准方式。
内容的提问来源于stack exchange,提问作者DEKKER
相关产品推荐
相关产品推荐

