Cmake生成的Xcode工程相对路径与绝对路径的问题
创始人
2024-12-09 18:05:35
0

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工程均为绝对路径的问题。给出了简单的修改为相对路径的方法以及操作步骤。本文仅供参考,面对您的工程时请谨慎操作,做好备份。
如果您觉得我写的不错,请记得给我一个免费的赞!

相关内容

热门资讯

最终!德普之星透视免费,微信小... 最终!德普之星透视免费,微信小程序雀神,好像真的是有挂(有挂攻略)1、下载好微信小程序雀神脚本下载之...
黑科技技巧!wepoker免费... 黑科技技巧!wepoker免费脚本,jj斗地主外开挂,都是是真的有挂(讲解有挂)1、每一步都需要思考...
突发!pokemomo辅助软件... 突发!pokemomo辅助软件,winner辅助软件,切实是真的有挂(有挂教程)1、实时winner...
更值得关注的是!wpk真吗,潮... 更值得关注的是!wpk真吗,潮友会鱼虾蟹塞子概率计算方式,原来真的有挂(有挂细节)一、潮友会鱼虾蟹塞...
突发!aapoker怎么选牌,... 突发!aapoker怎么选牌,雀友会广东潮汕辅助脚本,总是真的是有挂(真的有挂)该软件可以轻松地帮助...
截至目前!wpk软件是正规的吗... 截至目前!wpk软件是正规的吗,宝宝浙江游戏免费开挂,一直是真的有挂(有挂解密)宝宝浙江游戏免费开挂...
现有关情况通报如下!哈糖大菠萝... 现有关情况通报如下!哈糖大菠萝万能挂,蜀山四川麻亲友房祈福,果然存在有挂(发现有挂)1、游戏颠覆性的...
黑科技辅助挂!wepoker开... 黑科技辅助挂!wepoker开脚本视频,多乐小程序游戏破解器,确实确实有挂(证实有挂)黑科技辅助挂!...
2026版复盘!wepoker... 2026版复盘!wepoker俱乐部辅助,财神破解版全自动脚本,切实真的有挂(存在有挂)1、下载好财...
突发!we-poker辅助器,... 突发!we-poker辅助器,枫叶辅助器,一贯真的是有挂(揭秘有挂)枫叶辅助器透视方法中分为三种模型...