CMake 基于 Python execv 的包装器失败,并显示“CMake 错误:找不到 CMAKE_ROOT !!!”

问题描述 投票:0回答:1

我想为 CMake 编写一个 Python 包装器,但即使是最简单的包装也失败了:

#!/usr/bin/env python
import os
import sys
os.execvp("cmake", sys.argv) # or 'sys.argv[1:]', both fail

使用例如运行此 Python 脚本包含

./pycmake .
的目录中的
CMakeLists.txt
失败并显示:

CMake Error: Could not find CMAKE_ROOT !!!
CMake has most likely not been installed correctly.
Modules directory not found in

CMake Error: Error executing cmake::LoadCache(). Aborting.

在同一目录上运行

cmake .
可以正常工作。

我在拨打

os.execvp
电话时是否忘记了什么?或者 CMake 使用了某种在被 Python 包装时失败的机制?

python cmake
1个回答
0
投票

正如文档所说

无论哪种情况,子进程的参数都应以正在运行的命令的名称开头,但这不是强制执行的。

cmake
以及其他一些程序,要求第一个参数必须是其名称或可执行文件的路径。它正在幕后处理该参数,主要是初始化,这是因为当它得到其他东西时,它会大喊缺少 CMAKE_ROOT。因此,解决方案应该如下所示:

#!/usr/bin/env python

import os
import sys

os.execvp("cmake", ["cmake"] + sys.argv[1:])
© www.soinside.com 2019 - 2024. All rights reserved.