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"
- 打开
.pbxproj
文件,可以搜索user
等绝对路径中经常有的字段,这些就是要修改的绝对路径了。
2. 将projectDirPatrh
的路径替换为如下内容
projectDirPath = ""; //代表将项目根目录的路径替换为当前目录
- 将绝对路径中的替换成当前工程的
$(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
文件,看看是否能成功打开和索引工程中的文件,如果出现工程已损毁或者打开后工程文件索引不到,全部标红,说明刚刚修改的有错误。
这样防止在修改完后,发现工程无法运行,却无法定位问题位置。
- 修改完成后,可以上传到代码仓库中,再在电脑上另外一个位置clone下来;(上传到代码仓库中,应当忽略工程的中间文件)
- 打开工程文件,构建看是否成功,以及设置里的是否都是相对路径。
小结
本文主要讲述了在Cmake生成Xcode工程后,Xcode工程均为绝对路径的问题。给出了简单的修改为相对路径的方法以及操作步骤。本文仅供参考,面对您的工程时请谨慎操作,做好备份。
如果您觉得我写的不错,请记得给我一个免费的赞!