Windows下路径超260字符时Rust项目的CMake依赖构建失败
长路径下CMake构建GLFW(Rust glfw crate)失败的解决方案
问题说明
我在Rust中使用glfw crate开发OpenGL程序,该crate默认会通过构建脚本调用CMake编译GLFW依赖。短路径或中等长度带空格的路径下项目都能正常构建运行,但将项目移到长路径~/Dropbox/Coursework/5th Year - 2022-2023/Fall/COIS-4480H Computer Graphics/FinalProject后,执行rm -rf target && cargo run时构建失败,核心报错为FileTracker的FTK1011错误:无法创建指定路径的文件跟踪日志文件。尝试设置CMAKE_USE_RELATIVE_PATHS=TRUE未解决问题,同时我已向cmake-rs仓库提交bug报告,现寻求CMake层面的长路径解决方案。
可行解决办法
1. 指定短路径构建目录
修改项目的build.rs,给cmake-rs指定一个短路径的输出目录,让CMake在短路径下生成构建文件:
use cmake::Config; fn main() { let mut config = Config::new("glfw"); config.out_dir("/tmp/glfw-build"); // 替换为任意短路径 let dst = config.build(); println!("cargo:rustc-link-search=native={}/lib", dst.display()); println!("cargo:rustc-link-lib=glfw"); }
2. 缩短CMake生成文件的路径
通过CMake参数缩短临时文件目录名称,减少整体路径长度:
在build.rs中添加定义:
config.define("CMAKE_FILES_DIRECTORY", "cf") .define("CMAKE_USE_RELATIVE_PATHS", "ON");
3. 创建项目目录的短路径符号链接
直接在短路径下创建项目的符号链接,绕过原长路径限制:
ln -s ~/Dropbox/Coursework/5th\ Year\ -\ 2022-2023/Fall/COIS-4480H\ Computer\ Graphics/FinalProject ~/glfw-proj cd ~/glfw-proj rm -rf target && cargo run
4. 手动指定FileTracker日志文件路径
CMake的FileTracker日志路径过长导致创建失败,手动指定一个短路径的日志文件:
在build.rs中添加:
config.define("CMAKE_FILETRACKER_LOG_FILE", "/tmp/ft.log");
内容的提问来源于stack exchange,提问作者matthew-e-brown
相关产品推荐
相关产品推荐

