Xcode配置_Search Paths


转自:http://www.jianshu.com/p/9f9c1fd2e8b5

  1. $(SRCROOT) / $(PROJECT_DIR) 基本没啥区别,都是指向*.xcodeproj所在的路径

开发的过程当中,导入第三方库(framework/.a/.dylib)或者下载使用别人的demo会经常会遇到一些关于库的导入的问题。而导入第三方库后,这写库的路径应该现在在导入当前项目target的Search Paths中,具体的设置路径:target -> Build Settings -> Search Paths -> Framework Search Paths / Library Search Paths

创建测试demo

创建测试项目的时候分别创建framwork和library的文件夹,从两种不同类型的第三方库,不同目录位置去测试。两个相关目录的位置示意图:


  • Frameworks 文件夹在*.xcodeproj项目文件的上次层目录中
  • ThirdLib 文件夹在*.xcodeproj同级目录下的XcodeForSearchPathTest目录中

注意: Frameworks文件夹在拖到项目中的时候,取消Copy items if needed 选项

导入第三方库

将自己创建好的测试库libzhenLib.azhenFW.framework分别导入项目当中对应得文件夹,后Search Paths 变化示意图:



从图中可以看出Library Search Paths中Xcode自动添加好库的路径,但是Framework Search Paths中没有任何的变化。编译项目之后,会有一个错误ld: framework no found zhenFW



这个错误的原因是:zhenFW 已经导入到了项目当中,但是没有找到它的路径。通过猜想可以知道libzhenLib.a库没有报错并且Library Search Paths有它的库的路径,那么可能zhenFW报错的原因是Framework Search Paths中没有配置它的路径,下面咱们来配置它的路径来测试问题是否解决来验证我们的猜想的正确性。

配置zhenFW路径:首先点击Framework Search Paths展开添加路径的框,然后将zhenFW.framework拖拽到上面展开的框里面。拖入之后的示意图为:



拖到里面之后生成的路径为:"$(SRCROOT)/../Frameworks/zhenFW/zhenFW.framework",然后编译项目之后,还是报原先的错误。
报错原因:Framework Search Paths重点在Paths,是路径!但Xcode生成的路径是一个文件的路径,而不是目录的路径,将默认生成的修改为:"$(SRCROOT)/../Frameworks/zhenFW/",编译成功!

说明:

  • 正常导入库的时候Xcode会默认生成库的路径,但是有时候会没有生成,这时就需要差错,并且手动去解决、删除后重新导入以及查找该库的使用说明。
  • 如果在测试的时候,路径生成正常的话,可以自己手动删除一个来测试
  • 文件夹路径和文件路径的区别

Search Paths相关参数说明

  1. 导入库的时候自动生成的的路径:$(PROJECT_DIR)/XcodeForSeachPathTest/ThirdLib/zhenLib,手动拖拽的路径"$(SRCROOT)/../Frameworks/zhenFW/zhenFW.framework",很明显的区别是手动拖得有双引号,双引号的作用是如果在路径中有空格,可以识别该路径。没有双引号但是路径中有空格,我们发现它会自动变成两个路径。
  2. 路径中有空格必须要加双引号
  3. 多个路径可以用空格隔开,不用双引号包住
  4. $(SRCROOT) / $(PROJECT_DIR) 基本没啥区别,都是指向*.xcodeproj所在的路径
  5. 通过/..来调到上一层路径,返回上上层文件夹用/../..
  6. $(inherited) : target 的 Framework Search Paths添加$(inherited)参数会从PROJECT -> Build Settings -> Framework Search Paths里面的路径会被其继承,没有的话不会继承。所以一个项目里面有多个target,使用到了同一个库(Library或Framework)那么为了方便我们可以在target添加继承参数,并且PROJECT统一中添加库的路径。继承的优先级:

    • Platform defaults
    • Project file (描述举例用这个优先级,比较常用)
    • xcconfig file for the Project file
    • Target
    • xcconfig file for the Target
  7. recursive:遍历该目录,non-recursive:默认路径设置;不遍历该目录。如果路径的属性为recursive,那么编译的时候在找库的路径的时候,会遍历该目录下的所有子目录的库文件。PS:在搭建项目的时候,可以创建一个专门放库文件的文件夹并且设置其属性为recursive$(PROJECT_DIR)/**相当于遍历项目文件同级下的所有路径(不推荐使用,项目大的话,影响编译的速度)。

  8. Search Paths子选项:Header Search Paths 、User Header Search Paths的参数设置与其相同
  9. 具体路径应该需要根据不同项目的不同的路径来配置,通过了解相关配置,可以更加方便的差错和修复错误

测试demo

XcodeForSeachPathTest

参考文章



文/LeavesLife(简书作者)
原文链接:http://www.jianshu.com/p/9f9c1fd2e8b5
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
### 如何在 Xcode配置 OpenCV 环境 要在 Mac 的 Xcode 上成功配置 OpenCV C++ 开发环境,可以按照以下方法操作: #### 1. 获取 OpenCV 源码 可以通过下载官方发布的压缩包或者克隆 GitHub 仓库的方式获取 OpenCV 源码。推荐使用 Git 克隆方式以便于后续更新维护[^1]。 ```bash git clone https://github.com/opencv/opencv.git cd opencv git checkout 4.5.5 # 切换到指定版本 ``` #### 2. 安装依赖工具 `CMake` 为了编译 OpenCV 源码,需要先安装构建工具 CMake。可以选择通过 Conda 或 Homebrew 来完成安装: - 如果已经安装 Anaconda,则可以直接运行命令 `conda install cmake` 进行安装。 - 另一种常见方式是利用 Homebrew 工具执行 `brew install cmake`[^3]。 #### 3. 编译并安装 OpenCV 进入之前克隆下来的 OpenCV 文件夹目录,在终端创建一个新的子文件夹用于存放生成的中间产物以及最终库文件,并切换至该新建文件夹内启动 CMake 配置流程。 ```bash mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ .. make -j8 sudo make install ``` 上述脚本中的参数解释如下: - `-D CMAKE_BUILD_TYPE=RELEASE`: 设置为发布模式优化性能; - `-D CMAKE_INSTALL_PREFIX=/usr/local`: 自定义目标安装位置,默认即 `/usr/local`; - 参数最后附加两个连续点号代表返回上级路径指向根项目地址。 #### 4. 创建新的 Xcode 工程 打开 Xcode 应用程序界面点击左上角菜单栏选项 “File -> New Project”,选择 Command Line Tool 类型模板继续下一步设置工程基本信息完成后保存磁盘等待加载完毕即可[^4]。 #### 5. 添加头文件与链接动态库 找到刚才安装好的 OpenCV 头文件所在的具体物理存储路径通常位于 `/opt/homebrew/Cellar/opencv/4.5.5_2/include/opencv4` (具体视个人实际安装情况可能略有差异),将其添加进项目的 Header Search Paths 字段里;同样地也要把对应的 `.dylib` 动态共享对象加入 Library Search Paths 当前工作区中去。 另外记得勾选 Enable Modules(Import as Module)开关开启模块化支持功能方便日后调用更加简洁高效。 至此整个基于 macOS 平台下的 Xcode+C++开发框架集成 OpenCV 图像处理类库的工作就全部完成了! ```cpp #include <iostream> #include <opencv2/opencv.hpp> int main() { cv::Mat image = cv::imread("/path/to/image.jpg"); if(image.empty()) { std::cout << "Could not read the image." << std::endl; return -1;} cv::imshow("Display window",image); int k = cv::waitKey(0); // Wait infinitely for user to press any key return 0; } ``` 以上是一个简单的测试案例用来验证当前环境中是否能够正常载入图片资源并通过窗口展示出来效果如何[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值