原文网址:http://blog.csdn.net/fengsh998/article/details/8868871

通常在情一般都不建议使用绝对路径,因为写死之后,换环境,换平台,又要重新修改路径,因此常常使用相对路径,哪么相对路径通常使用的就是环境变量了。

在Mac 中,xcode 中build settings里面就有好多环境变量。

下面主要是以xcode 4.2 --sdk 5.0 进行说明,因为不同的环境build settings不一样,但差别不大。

xcode 的build settings配置项有几种设置

1、使用.xcconfig的方式进行配置

2、系统自荐的方式

3、自定义的方式

默认情况下,创建工程都是以自荐的方式,即默认已经设置好这些配置了。

哪怎么设置自定义方式呢?

xcode->Preferences->locations->advanced(高级)然后在下拉列表中选择。

Derived Data Location (Recommended)   ---系统自荐目录

Locations Specified by Targets                   ---使用targets文件进行设置,即我们每次建项目的时候都会产生一个targets,通过targets中的选项进行设定输出路径。

因为构选输出目录跟这个设置有关,所以先介绍这个设置。

实例来说明其中的作用:

1、选创建一个演示项目。如图:

存放目录为/Users/ffsh/Desktop/CProjectSet,其中ffsh为登录的用户名。

2、当xcode->Preferences->locations->advanced 中选择为Derived Data Location (Recommended) 时:

Derived data有三种选择如图:

a、当选择为default时,Derived Data的目录为  /Users/xxx/Library/Developer/Xcode/DerivedData

b、当选择为Relative时,Derived Data的目当为 当前.xcodeproj所在的目录。见图:

c、当选择为custom,即自定义,为了查看是否输出到自定义,我在Desktop下建了一个custom文件夹,然后设置Custom的输出路径为:/Users/ffsh/Desktop/Custom

同样可以把原来Derived Data下的东东全部输出到了custom。

上面是自荐的方式。

当xcode->Preferences->locations->advanced 中选择为Locations Specified by Targets时:

先来设置一下Build Products Path 中的值(默认为Build),这里取为myBuild.

然后分别将Derived Data设为:

a、default时,产生的mybuild 目录在.xcodeproj目录。

可以看到原来Derived Data目录下不现产生Build的文件夹了,些文件夹被放到了.xcodeproj目录。

b、Relative时,mybuild目录不变,但Derived Data目录放到了xcodeproj目录了。

c、custom时,把Derived data下的内容放到了custom目录。

如果Build Products Path 中的值为mybuild,但还是自荐方式的话,此时mybuild是不起作用的。

事实上,从上面大家可以知道,build出来的内容包括两个,一个是正式的,一个是临时的。可以在自荐的放式下看到

Build下有四个文件夹分别为:

filemaps

intermediates                      --编译中间产生的文件(temp)

precompileheaders

products  --编译最终产生的文件。

设置Build Products Path路径,其实是把products中的内容放到这个路径下。

设置Intermediates Build files path ,其实是把intermediates中的内容放到这个目录下。

Build Locations中的4个设置项的值:

默认情况下的

以下用$(default) 代替 /Users/xxx/Library/Developer/Xcode/DerivedData/CProjectSet-erpfssifqoxezbcceyoqjoclrfds

$(SYMROOT)  = $(default)/Build            -- 对应于Build Products Path设置,如果为自荐方式,这个值填了无效果,如果为使用targets配置方式这里填的才起效果

$(SYMROOT)/intermediates    ----中间构建文件存放路径,其中在Intermediates Build files path中只需要设为$(SYMROOT)即可,intermediates系统自动生成。

$(BUILD_DIR) = $(SYMROOT)/products

$(BUILD_ROOT) = $(BUILD_DIR)

$(CONFIGURATION)  当项目Build时选译Build configuration为Debug时值为Debug,当选为Release时,值为Release

$(EFFECTIVE_PLATFORM_NAME)   当模似器时为值为-iphonesimulator 当为真机时为-iphoneos

$(PROJECT_TEMP_DIR)   =  $(SYMROOT)/intermediates/xxxx.build       基中xxxx表过项目名称

$(CONFIGURATION_BUILD_DIR)   =  $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)       ---- (Per-Configuration Build Products Path)

$(CONFIGURATION_TEMP_DIR)   =    $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)     --(Per-Configuration Intermediate File Path)

自定义的情况下:

$(SYMROOT)  = $(SRCROOT)/abc            --- 其中abc为自己在Build Products Path中设置的值

$(BUILD_DIR) = $(SYMROOT)

$(BUILD_ROOT) = $(BUILD_DIR)

$(PROJECT_TEMP_DIR)   =  $(SYMROOT)/xxxx.build

通过自定义可以自行设定构建目录,便于管理。

iphoneos5.0下的编译脚本:

xcodebuild -project "UtilLib.xcodeproj" -configuration "Debug" -target "UtilLib" -sdk "iphoneos5.0" -arch "armv6 armv7" build RUN_CLANG_STATIC_ANALYZER=NO  $(BUILD_DIR)="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

iphonesimulator5.0下的编译脚本:

xcodebuild -project "UtilLib.xcodeproj" -configuration "Debug" -target "UtilLib" -sdk "iphonesimulator5.0" -arch "i386" build RUN_CLANG_STATIC_ANALYZER=NO $(BUILD_DIR)="${BUILD_DIR}"  BUILD_ROOT="${BUILD_ROOT}"

加上下面一句表示输出到文件:

> "${BUILD_ROOT}.build_output"

lipo脚本工具:合并iPhone模拟器和真机的静态类库,生成通用库

lipo -create -output "${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}" "${CURRENTCONFIG_DEVICE_DIR}/${EXECUTABLE_NAME}"         "${CURRENTCONFIG_SIMULATOR_DIR}/${EXECUTABLE_NAME}"

意思是:把"${CURRENTCONFIG_DEVICE_DIR}目录下的.a文件,和${CURRENTCONFIG_SIMULATOR_DIR}目录下的.a文件合并,

在${CREATING_UNIVERSAL_DIR}目录下,生成两个设备都通用的静态库,

例如:lipo -create -output xy.a x.a y.a

【转】 IOS 项目配置--构建输出DIR的更多相关文章

  1. Maven项目配置Logback输出JSON格式日志

    最近,项目提出需求,日志需要固定输出为JSON格式,以便后端Flink程序解析. 项目背景 项目为简单的Maven项目,日志由Filebeat采集,因此不需要配置输出至Logstash. 下面为pom ...

  2. IOS项目自动构建

    # Sets the target folders and the final framework product. # 如果工程名称和Framework的Target名称不一样的话,要自定义FMKN ...

  3. iOS学习——iOS项目Project 和 Targets配置详解

    最近开始学习完整iOS项目的开发流程和思路,在实际的项目开发过程中,我们通常需要对项目代码和资料进行版本控制和管理,一般比较常用的SVN或者Github进行代码版本控制和项目管理.我们iOS项目的开发 ...

  4. 配置iOS项目的设备系统目标设置:Base SDK和Deployment Target

    配置iOS项目的设备系统目标设置:Base SDK和Deployment Target Xcode为开发者提供了两个可配置的设置:第一个是Base SDK,第二个是iOS的Deployment Tar ...

  5. SpringBoot学习入门之Hello项目的构建、单元测试和热部署等(配图文,配置信息详解,附案例源码)

    前言: 本文章主要是个人在学习SpringBoot框架时做的一些准备,参考老师讲解进行完善对SpringBoot构建简单项目的学习汇集成本篇文章,作为自己对SpringBoot框架的总结与笔记. 你将 ...

  6. jenkins的构建项目配置

    继http://www.cnblogs.com/yajing-zh/p/5109517.html搭建好jenkins系统配置之后,新建jenkins构建项目,用于自动化构建. 点击Jenkins界面左 ...

  7. 使用IDEA构建Spring-boot多模块项目配置流程

    使用IDEA构建Spring-boot多模块项目配置流程 1.创建项目 点击Create New Project 在左侧选中Spring Initializer,保持默认配置,点击下一步. 在Grou ...

  8. IOS整体项目层级构建

    在创建IOS项目时,若有一个比较明确的层级架构,将对于今后代码的维护或者功能的扩展很有帮助:本文将通过一个实例来展现我对于层级的一些观点:里面有一些零碎的知识点可能无法全部介绍,到时提供源代码进行下载 ...

  9. Flask之项目配置,目录构建,闪现

    综合案例:学生成绩管理 新建项目目录students,并创建虚拟环境 mkvirtualenv students 安装开发中使用的依赖模块 pip install flask==0.12.4pip i ...

随机推荐

  1. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  2. Java集合框架(一)

    Java中集合类的关系图:  Collection 先来集合中的最大接口——Collection 可以通过查看JDK帮助文档,了解Collection接口中的最共性的方法.通过以下代码示例演示这些方法 ...

  3. spring 注入失败

    最近发现autowired注入总是失败. 总结下: 一个bean 要么都通过getter setter加上配置文件配置注入. <bean id="temResetService&quo ...

  4. ffmpeg转码时对编码率和固定码率的处理

    http://www.rosoo.net/a/201107/14663.html 一般fps在代码里这样表示 Fps = den/num 如果den = 15,num=1,则fps = 15. 如果帧 ...

  5. CentOS系统配置solr

    1.新建一个文件夹 比如soft   cd /soft   wget http://apache.fayea.com/lucene/solr/6.0.0/solr-6.0.0-src.tgz  --下 ...

  6. 配置Tomcat的服务端口

  7. CentOS启动和停止服务详解

    服务简介Linux 系统服务是在Linux启 动时自动加载,并在Linux退出时自动停止的系统任务.在Linux 启动过程中,我们可以看得很多“starting … ”提示信息,该信息表示正在启动系统 ...

  8. java Cache框架

    Cache框架乱炖   各类开源的缓存解决方案 JBossCache/TreeCacheJBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能.缓存数据被自动复制,让 ...

  9. SQL Server ->> 生成Numbers辅助表

    if object_id('MyDB.dbo.Numbers') is not null drop table MyDB.dbo.Numbers go use [MyDB] go create tab ...

  10. IO(一)

    文件相关 package com.bjsxt.io.file; import java.io.File; /** * 两个常量 * 1.路径分隔符 ; * 2.名称分隔符 /(windows) /(l ...