CMAKE_BUILD_DIR指向符号链接引发构建问题,求解决办法
符号链接路径不匹配导致构建脚本报错的修复方案
问题核心
脚本传入的CMAKE_BUILD_DIR是符号链接路径/tmp/ws/...,但源文件路径使用真实路径/private/tmp/ws/...,导致拼接后的目标文件路径同时包含两种前缀(/private/tmp/ws和/tmp/ws),与CMake实际生成的目标文件路径(仅用符号链接前缀)不匹配。
修复方法
统一路径为真实路径
- 直接修改脚本调用参数:将
CMAKE_BUILD_DIR的值从/tmp/ws/...替换为真实路径/private/tmp/ws/...,确保路径前缀一致。 - 在Python脚本中强制转换路径:在
find_object_file函数开头,对构建目录和源文件路径执行真实路径转换,代码示例:
转换后再进行路径拼接,即可匹配到正确的目标文件。import os # 处理构建目录路径 build_folder_path = os.path.realpath(build_folder_path) # 处理源文件路径(假设变量为src_file_path) src_file_path = os.path.realpath(src_file_path)
- 直接修改脚本调用参数:将
统一路径为符号链接路径
在Python脚本中将源文件路径的真实前缀替换为符号链接前缀,再拼接目标路径,代码示例:# 假设源文件路径变量为src_file_path src_file_path = src_file_path.replace("/private/tmp/ws", "/tmp/ws") # 执行原有的路径拼接逻辑 obj_file_path = os.path.join(build_folder_path, "modem/output_path/CMakeFiles/libname1.dir", src_file_path.lstrip('/')) + ".obj"使用相对路径拼接逻辑(最通用)
通过提取源文件相对于构建目录真实路径的相对路径,再拼接到传入的构建目录路径后,适配任意路径格式,代码示例:import os def find_object_file(build_folder_path, src_file_path): # 获取构建目录的真实路径 build_real_path = os.path.realpath(build_folder_path) # 计算源文件相对于构建目录真实路径的相对路径 src_rel_path = os.path.relpath(src_file_path, build_real_path) # 拼接目标文件路径 obj_file_path = os.path.join( build_folder_path, "modem/output_path/CMakeFiles/libname1.dir", src_rel_path ) + ".obj" # 后续文件存在性检查逻辑...
内容的提问来源于stack exchange,提问作者unblocker
相关产品推荐
相关产品推荐

