Windows下编译protobuf时CMAKE_INSTALL_PREFIX配置不生效问题求助
问题根源
- 直接将CMD下的cmake命令粘贴到PowerShell执行:CMD的续行符是
^,而PowerShell的续行符是**反引号()**,你之前的命令中^`没有被PowerShell识别为续行符,导致`-DCMAKE_INSTALL_PREFIX`参数根本没有传递给cmake,所以使用了默认安装路径。 - 仅设置
CMAKE_INSTALL_PREFIX环境变量无效:cmake不会主动读取该环境变量作为安装前缀,安装前缀优先级最高的是CMakeCache.txt中缓存的值,其次是执行cmake命令时显式传递的-DCMAKE_INSTALL_PREFIX参数,环境变量默认不生效。 - 之前执行过cmake生成了缓存文件,即使后续修改参数,旧的缓存值也会优先生效,导致新配置不生效。
正确操作步骤
- 清理旧构建缓存:进入你之前的构建目录(比如
C:\Path\to\protobuf\cmake\build\release),删除目录下全部内容,避免旧缓存干扰。 - 执行cmake命令时直接显式指定安装前缀(最稳妥,不需要设置环境变量):
cmake -G "NMake Makefiles" ` -DCMAKE_BUILD_TYPE=Release ` -DCMAKE_INSTALL_PREFIX="C:/Users/uname/Workspace/protobuf-3.18.0/install" ` ../..
注意:路径可以用正斜杠,也可以用双反斜杠,只要用引号包裹即可;续行符是键盘上ESC下方的反引号,不是CMD用的^。
- 后续正常执行编译安装命令即可:
nmake nmake install
如果确实需要通过环境变量传递安装前缀,需要在cmake参数中显式引用环境变量:
$Env:CMAKE_INSTALL_PREFIX="C:/Users/uname/Workspace/protobuf-3.18.0/install" cmake -G "NMake Makefiles" ` -DCMAKE_BUILD_TYPE=Release ` -DCMAKE_INSTALL_PREFIX=$Env:CMAKE_INSTALL_PREFIX ` ../..
内容的提问来源于stack exchange,提问作者hasdrubal
相关产品推荐
相关产品推荐

