当前位置: 首页 > news >正文

Cmake生成的Xcode工程相对路径与绝对路径的问题

Cmake生成的Xcode工程相对路径与绝对路径的问题

文章目录

  • Cmake生成的Xcode工程相对路径与绝对路径的问题
    • 前言
    • 修改`.pbxproj`文件
    • 验证工程
    • 小结

前言

由于Cmake的跨平台的自动化构建的方便性以及他广泛应用于编译过程的管理,在开发过程中难免用到Cmake。我也使用Cmake针对相关静态库进行编译,得到在iOS下使用的静态库,但由于Cmake生成的相关工程是绝对路径的,因此在合作开发过程中,别人不能够很方便的进行共同开发。我针对Cmake生成相对路径的工程又不熟悉,因此只能针对生成的Xcode工程进行从绝对路径到相对路径的改造,因此本文的操作方式可能不那么符合正常的工作流程
并且在相关的类似文章中,也有人提到Cmake生成的VScode工程是绝对路径,并且是有意为之的,相关文章:CMake生成的vs的工程文件为何采用的是绝对路径

使用的Cmake命令生成Xcode工程:Cmake . -G "Xcode"

修改.pbxproj文件

project.pbxproj文件是一个基于XML格式的文本文件,它存储了Xcode工程中几乎所有的配置信息,包括目标(Targets)、源文件(Source Files)、资源文件(Resources)、构建设置(Build Settings)等。在Xcode中,每当你对项目进行更改(如添加、删除或修改文件,更改构建设置等),这些更改都会反映到project.pbxproj文件中。 参考的相关文章:Xcode工程解析:深入了解project.pbxproj文件

.pbxproj文件也是Xcode中的Build Settings, General等设置的总和,一般来说在Xcode中通过GUI来修改项目配置,.pbxproj也会同步更新,但某些情况却不会,因此可能需要打开.pbxproj来修改。(本人操作可能不规范)
修改.pbxproj文件时,需要注意备份,以免关键数据丢失。
Note:应当尝试首先修改build settings中的内容,如果能够起作用,请不要修改.pbxproj文件。

修改的原则:根据自己通过Xcode建立的工程的.pbxproj文件进行对比,修改为相对路径

其中需要用到的配置项有 $(PROJECT_DIR)$(SRCROOT),它们分别表示项目根目录和项目目录。二者的区别: ( S R C R O O T ) 和 (SRCROOT)和 (SRCROOT)(PROJECT_DIR)和 ( i n h e r i t e d ) 和 (inherited)和 (inherited){PODS_ROOT}
如果不确定二者的路径到底是什么,可以通过以下命令来查看

xcodebuild -project projectName.xcodeproj -showBuildSettings | grep "SRCROOT"
xcodebuild -project projectName.xcodeproj -showBuildSettings | grep "PROJECT_DIR"
  1. 打开.pbxproj文件,可以搜索user等绝对路径中经常有的字段,这些就是要修改的绝对路径了。

在这里插入图片描述
2. 将projectDirPatrh的路径替换为如下内容

projectDirPath = ""; //代表将项目根目录的路径替换为当前目录

  1. 将绝对路径中的替换成当前工程的$(PROJECT_DIR),示例如下:
//未修改之前的代码,已脱敏
HEADER_SEARCH_PATHS = (/Users/xxxx/src/main,/Users/xxxx/src/main/xx,/Users/xxxx/src/main/xx,/Users/xxxx/src/main/xxxx,/Users/xxxx/src/main/xxx,/Users/xxxx/src/main/xxxx,/Users/xxxx/src/main/xxxxxxx,"$(inherited)",);
//修改为
HEADER_SEARCH_PATHS = ("$(PROJECT_DIR)/src/main","$(PROJECT_DIR)/src/main/xx","$(PROJECT_DIR)/src/main/xx","$(PROJECT_DIR)/src/main/xxxx","$(PROJECT_DIR)/src/main/xxx","$(PROJECT_DIR)/src/main/xxxx","$(PROJECT_DIR)/src/main/xxxxxxx","$(inherited)",);

类似的均这样修改. Note:.pbxproj文件中,使用$(PROJECT_DIR)要在路径前后加上双引号,上述代码已体现。

验证工程

在上述进行修改时,应当时不时的点击.pbxproj文件,看看是否能成功打开和索引工程中的文件,如果出现工程已损毁或者打开后工程文件索引不到,全部标红,说明刚刚修改的有错误。
这样防止在修改完后,发现工程无法运行,却无法定位问题位置。
在这里插入图片描述

在这里插入图片描述

  1. 修改完成后,可以上传到代码仓库中,再在电脑上另外一个位置clone下来;(上传到代码仓库中,应当忽略工程的中间文件)
  2. 打开工程文件,构建看是否成功,以及设置里的是否都是相对路径。

小结

本文主要讲述了在Cmake生成Xcode工程后,Xcode工程均为绝对路径的问题。给出了简单的修改为相对路径的方法以及操作步骤。本文仅供参考,面对您的工程时请谨慎操作,做好备份。
如果您觉得我写的不错,请记得给我一个免费的赞!

http://www.lryc.cn/news/407731.html

相关文章:

  • “机器说人话”-AI 时代的物联网
  • C#高级:数据库中使用SQL作分组处理3(ROW_NUMBER() 关键字)
  • 光明乳业:以科技赋能品质,引领乳业绿色新未来
  • Footprint Analytics 助力 Core 区块链实现数据效率突破
  • 从零搭建pytorch模型教程(八)实践部分(二)目标检测数据集格式转换
  • MYSQL(2) 高级查询
  • 小程序的运营方法:从入门到精通
  • 【优秀python算法毕设】基于python时间序列模型分析气温变化趋势的设计与实现
  • 掌握 Symfony 路由系统:配置与管理
  • OpenTeleVision复现及机器人迁移
  • 气膜足球馆:经济高效的室内足球场馆解决方案—轻空间
  • Vue3二次封装axios
  • 【MetaGPT系列】【MetaGPT完全实践宝典——多智能体实践】
  • C#中GridControl的数据源双向绑定
  • sklearn详细基础教程(科普篇)
  • el-table列的显示与隐藏
  • 使用命令快速删除项目中的node_modules
  • leetCode15三数之和(双指针)
  • 数据挖掘-数据预处理
  • 【调试笔记-20240723-Linux-gitee 仓库同步 github 仓库,并保持所有访问链接调整为指向 gitee 仓库的 URL】
  • 《GPT-4o mini:开启开发与创新的新纪元》
  • 生成树协议配置与分析
  • Golang | Leetcode Golang题解之第287题寻找重复数
  • 【音视频SDL2入门】创建第一个窗口
  • 《置身事内:中国政府与经济发展》生活过得好一点,比大多数宏伟更宏伟
  • MongoDB教程(十八):MongoDB MapReduce
  • HTML前端面试题之<iframe>标签
  • Docker-Compose实现MySQL之主从复制
  • jetson显卡没有加速,而是在用cpu推理?
  • Linux下如何安装配置Fail2ban防护工具