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

相关内容

热门资讯

专业讨论!微扑克辅助是真的吗,... 您好,德扑之星ai代打这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在...
aapoker透明挂!aa扑克... aapoker透明挂!aa扑克辅助,(aa扑克有外挂)原生是有挂(详细辅助详细教程)关于aapoke...
玩家攻略!wepoke ai,... 玩家攻略!wepoke ai,德州之星外挂,必赢方法(确实真的是有挂)1、许多玩家不知道德州之星外挂...
aapoker猫腻!aapok... aapoker猫腻!aapoker发牌规律,(aapoker ai)固有是有挂(详细辅助必赢方法);...
盘点十款!wepoke系统规律... 盘点十款!wepoke系统规律,aapoker透明挂,2025教程(从来真的是有挂)1、aapoke...
aapoker辅助工具!AA ... aapoker辅助工具!AA POKER下载软件,(aapoker工具)原先存在有挂(详细辅助科技教...
技巧知识分享!wpk数据工具,... 技巧知识分享!wpk数据工具,德扑之星作弊,wpk教程(最初是有挂)1、超多福利:超高返利,海量正版...
aa扑克辅助!aapoker有... aa扑克辅助!aapoker有伙牌吗,(aa扑克辅助)总是是有挂(详细辅助AI教程);aa扑克辅助软...
教程辅助!微扑克靠谱吗,微扑克... 教程辅助!微扑克靠谱吗,微扑克辅助挂,解密教程(从来是有挂)1、构建自己的微扑克辅助插件;2、选择您...
aapoker发牌机制!aa扑... 1、aapoker发牌机制!aa扑克不能用模拟器,(aa扑克辅助)原先存在有挂(详细辅助普及教程)2...