本质是目标路径无写入权限,解决方法是用--prefix指定可写路径,如cmake --install . --prefix ./install;或配置阶段用-d cmake_install_prefix指定,避免权限和路径字符问题。

cmake --install 报错“file cannot create directory”或“insufficient privileges”,本质是目标路径没有写入权限。Windows 默认往 C:/Program Files 写,Linux 默认往 /usr/local 写,普通用户没这权限——这不是 CMake 有 bug,是你没给它开门的钥匙。
用 --prefix 指定可写的安装路径
最安全、最常用的做法,是绕开系统保护目录,把东西装到你有完全控制权的地方:
• 直接在安装命令里加 --prefix,比如:cmake --install . --prefix ./install,生成的 bin/lib 就会落在当前构建目录下的 install/ 子目录里
• 这个路径可以是相对路径(如 ./install),也可以是绝对路径(如 /home/you/myproject/install 或 E:/dev/myproj/install)
• 注意:该选项只对本次 cmake --install 生效,不影响下次构建
在配置阶段就固化安装路径
如果你希望整个构建过程都默认走自定义路径,而不是每次 install 都要敲--prefix:
• 在运行 cmake 配置命令时,用 -D 覆盖变量:cmake -DCMAKE_INSTALL_PREFIX=./install ..
• 这个值会被写进 CMakeCache.txt,后续所有 cmake --install 都自动继承
• 也可以在 CMakeLists.txt 开头硬编码:set(CMAKE_INSTALL_PREFIX "E:/mybuild/install" CACHE PATH ""),但不推荐,会降低项目可移植性
Windows 上别硬刚 C:/Program Files
在 Win10/Win11 上试图以管理员身份运行终端再 install,看似能过,但隐患多:
• VS Code、CLion 等 IDE 内嵌终端即使“以管理员启动”,也可能因 UAC 隔离导致权限不传递
• 手动给 C:/Program Files 目录加“完全控制”权限,等于削弱系统防护,不建议日常开发这么做
• 更糟的是:如果项目用了 install(DIRECTORY ...) 且路径含空格(如 Program Files (x86)),还可能触发额外的 quoting 错误
• 真要部署到 Program Files,应留到最终打包阶段,由安装器(如 NSIS、WiX)处理权限,而非开发期硬写
Linux/macOS 下避免 sudo make install
服务器或无 root 权限环境里,sudo cmake --install 不仅危险,还常失败:
• sudo 启动的进程可能找不到你的用户级环境变量(比如 PATH、PKG_CONFIG_PATH),导致 install 步骤依赖的工具链缺失
• 更稳妥的方式是:用 --prefix=$HOME/local 安装,然后把 $HOME/local/bin 加进 ~/.bashrc 或 ~/.zshrc
• 如果项目要求必须装到 /usr/local,优先联系运维申请临时授权,而不是自己配 sudoers —— 权限粒度越细越安全
C:/我的项目/build 这种路径在 CMake install 阶段仍可能因 shell 解析或 Windows API 行为异常而静默失败。统一用纯英文、无空格、无特殊字符的路径,比反复调权限更省时间。











