CMake通过execute_process获取npm版本失败的问题咨询
解决CMake execute_process无法找到npm的问题
我之前也碰到过类似的情况,明明在VS工具命令行里能正常运行npm,但CMake就是找不到,给你几个可行的解决思路:
直接指定npm的完整路径
既然你已经用where npm找到了npm的位置,不如直接把完整路径写到execute_process里,彻底避开环境变量加载的问题。比如如果你的npm路径是C:\Program Files\nodejs\npm.cmd,可以改成:execute_process(COMMAND "C:\\Program Files\\nodejs\\npm.cmd" --version OUTPUT_VARIABLE NPM_VERSION) message("npm: ${NPM_VERSION}")注意路径里的空格要加引号,而且Windows下路径分隔符要用双反斜杠转义。
验证CMake运行环境的PATH变量
有时候CMake运行的环境和你手动打开的VS命令行环境不一样,导致PATH里没有npm的路径。可以在CMake脚本里先打印当前的PATH,看看有没有包含nodejs的目录:execute_process(COMMAND echo %PATH% OUTPUT_VARIABLE CURRENT_PATH) message("Current PATH: ${CURRENT_PATH}")如果输出里找不到nodejs的路径,那说明CMake没拿到正确的环境变量,这时候你可以手动在CMake里添加路径:
set(ENV{PATH} "C:\\Program Files\\nodejs;$ENV{PATH}") execute_process(COMMAND npm --version OUTPUT_VARIABLE NPM_VERSION)在正确的工具链环境下运行CMake
不要直接在Visual Studio IDE里或者普通cmd里运行CMake,而是打开VS 2019的x64原生工具命令提示符,在这个窗口里切换到你的项目目录,然后运行CMake的配置和构建命令,这样CMake会继承这个窗口的所有环境变量,包括nodejs的路径。确保环境变量修改生效
如果你刚修改了系统环境变量,记得重启所有相关的程序——比如Visual Studio、CMake GUI(如果用的话),甚至重启电脑。很多程序只会在启动时加载一次环境变量,不重启的话新的路径不会生效。
内容的提问来源于stack exchange,提问作者Mateusz




