CMake中FindPython与find_package(Python ...)的关系及选用方法
选择建议
如果项目可以确保CMake最低版本为3.12及以上,直接使用find_package(Python ...)即可,这是官方当前推荐的标准写法,不存在两种平行方案二选一的情况。
二者的关联
FindPython是CMake 3.12版本新增的内置查找模块,而find_package(Python ...)是CMake原生的包查找指令,二者是调用与被调用的关系:当你执行find_package(Python [可选参数])时,CMake在模块查找模式下会自动加载内置的FindPython模块,完成Python解释器、开发库等相关组件的检测,不需要手动额外加载模块文件。- 你看到的写法差异,本质是CMake Python查找机制迭代带来的历史遗留问题:3.12版本之前,官方没有统一的Python查找模块,只能通过
find_package(PythonInterp)和find_package(PythonLibs)两个独立模块分别查找解释器和开发依赖,这套逻辑很容易出现解释器和链接库版本不匹配的问题,现在已经被官方标记为废弃不推荐使用。 - 3.12版本推出的
FindPython模块就是为了替代上述老旧方案,它支持灵活指定查找Python2/Python3版本、自动保证找到的解释器、头文件、链接库版本完全一致,还支持直接查找NumPy等扩展组件,鲁棒性比旧方案高很多,而调用这个新模块的标准入口就是find_package(Python ...)。
如果你只需要锁定特定大版本的Python,也可以直接使用find_package(Python3 ...)或者find_package(Python2 ...)的写法,这两个也是FindPython模块提供的官方调用入口,效果和在find_package(Python)中指定版本参数完全一致。
内容的提问来源于stack exchange,提问作者BeeOnRope
相关产品推荐
相关产品推荐

